1

我在生产中遇到错误,阻止我使用 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

有谁知道发生了什么?

4

2 回答 2

4

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

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

将所有上传的所有权更改给正确的用户和组解决了这个问题。

于 2013-11-06T12:08:16.467 回答
1

你检查了carrierwave的cache_path的权限吗?默认情况下,它是 public/uploads/tmp/。

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

于 2013-10-05T15:36:03.937 回答