[英]Using Carrierwave and Capistrano with Rails
我无法让carrierwave 和capistrano 相互配合。
首先,我使用这种方法来使用公共目录和私有控制器处理的下载目录。 Tl; dr,carrierwave 的根实际上是Rails.root
,而不是public
。 但是,我通过为所有非私有文件定义一个设置公共根的基类来解决 url(因为 Rails 在 url 中不使用public
字面意思)。
无论如何,我终于开始尝试将代码推向生产。 一切顺利! 我的上传显示很好。 但是,当我推送另一个部署时,我丢失了公共目录中的所有图像。
这是 capistrano 的一个有据可查的案例 - 它只涉及设置:linked_dirs
。 就我而言,我使用了以下行。
set :linked_dirs, %w{public/assets public/uploads downloads}
public/assets
是我的通用 css/js 文件, public/uploads
是我的多媒体文件,而downloads
是我的受保护文件。
不幸的是,这并没有解决我的问题。 无论出于何种原因,尽管显示在正确的路径中,但所有图像都得到404
。
更奇怪的是,受保护的downloads
文件夹工作得很好! 也许这与在 Carrierwave 中设置根有关? 在这一点上,我很想为我的公共文件拿起回形针,为私人文件拿起carrierwave。
我已经在这里呆了 7 个小时,但我仍然不知道该怎么做。
我的deploy.rb文件
我有问题的图片上传文件
我的工作产品文件上传器文件
我的nginx.conf文件
查看您发布的其他问题和答案,您已对 CarrierWave 上传目录和文件设置了限制性权限:
# Broken permissions
CarrierWave.configure do |config|
config.permissions = 0600
config.directory_permissions = 0700
config.storage = :file
end
0600
和0700
权限仅授予拥有文件或目录的用户访问权限。 这是因为第三位和第四位“组”和“所有人”都设置为 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.