我无法让 Carrierwave 和 Capistrano 很好地配合。
首先,我使用 this method使用公共(public)目录和私有(private) Controller 处理的目录进行下载。 Tl;dr,Carrierwave 的根目录实际上是 Rails.root
,而不是 public
。但是,我通过定义一个为所有非私有(private)文件设置公共(public)根的基类来解决 url 的问题(因为 Rails 并不在 url 中字面上使用 public
)。
无论如何,我终于开始尝试将代码推向生产环境。一切顺利!我的上传显示得很好。但是,当我推送另一个部署时,我丢失了公共(public)目录中的所有图像。
这是一个有据可查的 capistrano 案例 - 它只涉及设置 :linked_dirs
。就我而言,我使用了以下行。
set :linked_dirs, %w{public/assets public/uploads downloads}
其中 public/assets
是我的常规 css/js 文件,public/uploads
是我的多媒体文件,downloads
是我的 protected 文件.
不幸的是,这并没有解决我的问题。无论出于何种原因,尽管显示在正确的路径中列出,但所有图像都会收到 404
。
更奇怪的是, protected downloads
文件夹工作得很好!也许这与在 Carrierwave 中 Root 有关?此时,我很想为我的公共(public)文件选择回形针,为私有(private)文件选择 Carrierwave。
我已经为此花了 7 个小时,但我仍然不知道该怎么做。
我的deploy.rb文件
我的问题image uploader文件
我的工作product file uploader文件
我的nginx.conf文件
最佳答案
查看other question & answer you posted ,您已对 CarrierWave 上传目录和文件设置限制性权限:
# Broken permissions
CarrierWave.configure do |config|
config.permissions = 0600
config.directory_permissions = 0700
config.storage = :file
end
0600
和 0700
权限仅向拥有该文件或目录的用户授予访问权限。这是因为第三和第四位“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
关于ruby-on-rails - 将 Carrierwave 和 Capistrano 与 Rails 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565629/