Carrierwave 上传的图像在 Capistrano 部署后不持久

Carrierwave uploaded Images aren't persistent after Capistrano deploy

我刚刚注意到,在我将我的 rails 应用程序重新部署到生产环境后,使用 cap deploy:migrations 我通过管理表单上传的任何图像(例如使用头像图像创建推荐信) ) 图像链接现在已损坏。只要我不重新部署任何代码,图像就可以正常显示,这是不需要的,因为我推送代码更改非常频繁。我假设这与 capistrano 在 'releases' 中为每个部署创建文件结构的方式有关,但我不确定如何解决这个问题。

我也没有使用 git 跟踪 public/uploads,因为我不希望我在本地主机上使用的虚假内容出现在生产环境中。

所以,在我最新的代码推送之前,我把所有的图片都放在那里了,因为我刚刚添加了它们。现在,推送后没有图像:

以下是我认为相关的文件(如果您还需要查看这些文件,请告诉我):

avatar_uploader.rb:

class AvatarUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :file

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

  process :resize_to_fit => [200, 200]

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

好像你没有在你的 deploy.rb 中配置 linked_dirs 变量(在 Capistrano 3 的情况下)或者没有为你的 [=11] 指定 sym-link =] 来自 shared/public/uploads(在 Capistrano 2 的情况下)。

如果没有它,所有部署都会 "override" public/uploads 目录。

Here 更详细。

默认情况下,Capistrano 链接 public/system 目录。因此,要保留您的图像,只需更改

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

def store_dir
  "system/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end