Errno::EPERM(不允许FILE_PATH操作)使用 Rails、Carrierwave、Amazon EC2



我在生产中遇到错误,导致我无法使用 Rails 和 Carrierwave 将映像上传到 Amazon EC2。

该应用程序在我的本地开发服务器上运行良好,但在生产中我收到此错误

Completed 500 Internal Server Error in 6319ms
Errno::EPERM (Operation not permitted - /FILE/PATH/TO/IMAGE/DESTINATION):

我检查以确保目标文件具有所有正确的权限。它是上传目录,我确保任何人都可以读取,写入和执行整个目录。

 ** [] lrwxrwxrwx.  1 foo rvm   50 Oct  3 10:53 uploads

有人知道发生了什么吗?

这是由权限问题引起的。我们的 rails 应用程序使用 Amazon EC2、Capistrano 进行部署,并使用多阶段扩展进行生产和暂存环境。

在我们转向多阶段扩展之前,其中一位贡献者拥有整个 rails 应用程序,我们称他为"foo"。实现多阶段后,我们决定将整个应用移动到使用名为"appuser"的全局用户。问题是许多上传的内容仍然归foo所有。这导致了写入问题。

将所有上传内容的所有权更改为正确的用户和组解决了此问题。

您是否检查过 carrierwave cache_path的权限?默认情况下,它是public/uploads/tmp/。

您是否检查过 carrierwave 的 config.permissions 和config.directory_permissions?它们分别默认为 0666 和 0777,这可能足以或可能不足以允许上传,具体取决于服务器的设置方式。

最新更新