ruby-on-rails - 将 Carrierwave 和 Capistrano 与 Rails 结合使用

标签 ruby-on-rails capistrano carrierwave production

我无法让 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

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

关于ruby-on-rails - 将 Carrierwave 和 Capistrano 与 Rails 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565629/

相关文章:

javascript - Rails 4.2 jQuery 仅在刷新后加载

javascript - Jasmine 规范生成与执行时不同的随机数

ruby-on-rails - 如何解决使用MiniMagick操作失败,可能不是图像?原始错误: You must have ImageMagick or GraphicsMagick installed

ruby-on-rails - 所有版本创建后Carrierwave回调

file-upload - 使用 Rails 4、强参数和 Carrierwave 上传文件

ruby-on-rails - Rails 测试套件中显示的数据库调用

ruby-on-rails - 在 debian Squeeze 上安装 RoR

ruby-on-rails - Capistrano 部署因 Capistrano-Harrow gem 的新请求而中断?

ruby-on-rails - 使用 Rails 和 Capistrano 部署在 EC2 上自动扩展

ruby-on-rails - Capistrano 部署和 schema.rb