如何将 CarrierWave 的 'stor_dir' 设置为在重新 运行 'cap deploy' 后将持续存在的服务器位置?

How to set CarrierWave's 'stor_dir' to a server location that will persist after re-running 'cap deploy'?

我使用 picture_uploader.rb 上传到我的 rails 应用程序的图像在每个新 'cap deploy' 后消失。

# picture_uploader.rb

class PictureUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  process resize_to_limit: [500, 500]

  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{Rails.env}/#{model.id}"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

Capistrano 将我的应用程序部署到:

/var/www/myapp_app/

所以上述配置得到的物理存储位置为:

/var/www/myapp_app/releases/20150608000412/uploads/micropost/production/338/example_photo.jpg

并且在网络浏览器中呈现的图像路径变为:

https://example.com/uploads/micropost/production/338/example_photo.jpg

上传的图片起初似乎有效,但下次我 运行 'cap deploy'.

时就消失了

在此先感谢您的帮助。

我明白了。问题出在 config/deploy/production.rb。我需要像这样将 'public/uploads' 添加到我的 linked_dirs 中:

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

这样 Capistrano 将创建 shared/public/uploads/ 目录(如果不存在)并将每个新的部署版本符号链接到它。