Rails 使用 Carrierwave 和 Capistrano

Using Carrierwave and Capistrano with Rails

我在让 carrierwave 和 capistrano 相互配合时遇到问题。

首先,我使用 来同时使用 public 目录和一个由控制器处理的私有目录来进行下载。 Tl;dr,carrierwave 的根实际上是 Rails.root,而不是 public。但是,我通过定义一个设置 class 的基础 class 解决了这个 urls(因为 Rails 在 url 中字面上不使用 public) =52=] 根目录,用于所有非私人文件。

无论如何,我终于开始尝试将代码推向生产环境。一切顺利!我的上传显示正常。但是,当我推送另一个部署时,我丢失了 public 目录中的所有图像。

这是一个有据可查的 capistrano 案例 - 它只涉及设置 :linked_dirs。就我而言,我使用了以下行。

set :linked_dirs,  %w{public/assets public/uploads downloads}

其中 public/assets 是我的一般 css/js 文件,public/uploads 是我的多媒体文件,downloads 是我的受保护文件。

不幸的是,这并没有解决我的问题。无论出于何种原因,所有图像都得到 404 尽管显示在正确的路径中列出。

更奇怪的是,受保护的 downloads 文件夹工作得很好!也许这与在 Carrierwave 中设置根有关?在这一点上,我很想为我的 public 文件选择回形针,为私人文件选择载波。

我已经做了 7 个小时了,但我仍然不知道该做什么。

我的deploy.rb文件

我的问题 image uploader 文件

我的工作product file uploader文件

我的nginx.conf文件

查看 ,您对 CarrierWave 上传目录和文件设置了限制性权限:

# Broken permissions
CarrierWave.configure do |config|
  config.permissions = 0600
  config.directory_permissions = 0700
  config.storage = :file
end

06000700 权限仅授予拥有文件或目录的用户访问权限。这是因为第三位和第四位 "group" 和 "everyone" 都设置为 0。

nginx、Puma 和 Capistrano 可能不都是 运行 在同一个用户下,这意味着这些仅限用户的权限会阻止 nginx 读取文件(上传后导致 403 错误)并阻止 Capistrano 从链接 public/uploads 目录(在新部署后导致 404 错误)。

相反,使用更多的开放权限,例如 CarrierWave README 中列出的内容:

# Fixed permissions
CarrierWave.configure do |config|
  config.permissions = 0666
  config.directory_permissions = 0777
  config.storage = :file
end