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
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
我在让 carrierwave 和 capistrano 相互配合时遇到问题。
首先,我使用 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文件
查看
# 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