在heroku上的Rails rmagick gem无法找到图片

时间:2016-05-25 17:41:13

标签: ruby-on-rails heroku carrierwave rmagick

我有一个rails应用程序,用户可以上传汽车图片然后我在滑块上显示它们。我正在使用Carrierwave和RMagick。

我已将我的应用推送到heroku并上传了一些汽车图片以及用户个人资料图片。

起初,heroku完美地显示图片,但在稍后的某个时间,Heroku在上传的图片上显示加载错误(404找不到错误)。

我认为这可能是因为RMagick因为当我推送应用程序时它会发出警告RMagick被折旧需要rmagick。

我的image_uploader.rb文件;

# encoding: utf-8

class ImageUploader < CarrierWave::Uploader::Base


  include CarrierWave::RMagick


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

  version :large do
    process :resize_to_fill => [327, 282] 
  end

  version :mid do
    process :resize_to_fill => [217, 141] 
  end


end

图片保存在public/uploads/picture/image/1/car_mid.png

修改

也许那可能是个问题?我正在为Heroku使用免费帐户。 Heroku not saving uploaded pictures。但是当我上传时,我会看到图片,过了一会儿它们就会消失。

EDIT2:

我上传了一些汽车图片之后,我已经通过heroku restart命令重新启动了heroku app,这些图片都消失了(404找不到)。所以,你认为问题是因为我使用1 dyno的免费帐户吗?

1 个答案:

答案 0 :(得分:1)

Heroku上的文件系统没有持久化。只有通过部署机制(git push)上传的文件才会持续存在&#34;。其他类似public文件夹中的内容将被删除。这就是他们消失的原因。

我已回复了similar question here。这是一个引用:

你在Heroku上的dyno有一个&#34;只读&#34;文件系统。从某种意义上说,您的dyno重启之间不会保留您的文件,并且无法保证它们会在任何两个请求之间保持不变。这是一个excerpt from the docs

  

每个dyno都有自己的短暂文件系统,不与任何其他dyno共享,一旦断开连接就会被丢弃。这个文件系统填充了slug存档,因此一次性dynos可以充分利用应用程序中部署的任何内容。

您可以将#{Rails.root}/tmp文件夹用作临时文件夹,但需要将文件上传到某些外部存储设备(S3,某些CDN等)。 Heroku有一些插件可以轻松处理。