【发布时间】:2017-05-24 18:05:16
【问题描述】:
我无法让载波和 capistrano 相互配合。
首先,我使用this method 来使用公共目录和专用控制器处理目录进行下载。 Tl;博士,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 中设置根有关?在这一点上,我很想为我的公共文件拿起回形针,为私人文件拿起载波。
我已经做了 7 个小时了,但我仍然不知道该怎么做。
我的deploy.rb 文件
我有问题的image uploader 文件
我的工作 product file uploader 文件
我的nginx.conf 文件
【问题讨论】:
-
与您尝试完成我的 capistrano 部署相同,我已完成 99%,但仍有一些小问题,我没有指定 root,我只有
def store;"system/ckeditor/pictures/#{model.id}";end;,所以我假设在您的如果你可以尝试评论def root。 -
您是否将carrierwave 设置为默认使用Rails.root 而不是公共目录?不幸的是,我试过了,但没有用。
-
我添加了我的files here,我注意到你和我的
nginx.conf文件发生了变化,可能是因为你使用的是 puma 而我使用的是phusion passenger,你有location ^~ /assets/ {,其中我有location ^~ /system/ {,然后在文件root /home/deploy/apps/x/current/public;中再次定义了root。我能够通过nginx.conf中的最终更改完成我的 capistrano 部署,因为直到某个时候,我发现public/system中存在的图像找不到 404。 -
如果这是一个新项目,那么我建议使用 aws s3 存储并将
carrierwave中的storage选项更改为storage :fog,因为我们一直在使用 s3 和存储的组合服务器上本地的文件。将存储选项设置为file,这是一个很大的错误,它让 s3 挂载会被频繁卸载,这很痛苦(可以通过脚本修复)。直接将文件上传到 s3 为您提供了使用expiring download URLs的优势,而且您不必担心同步本地文件夹,我想这会在private downloads的情况下为您提供帮助。跨度> -
您确认文件确实被写入 /public/uploads 了吗?如果是这样,这些文件的权限是什么?
标签: ruby-on-rails capistrano carrierwave production