繁体   English   中英

在 Rails 中使用 Carrierwave 和 Capistrano

[英]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

06000700权限仅授予拥有文件或目录的用户访问权限。 这是因为第三位和第四位“组”和“所有人”都设置为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM