Heroku,CarrierWave,MiniMagick:缺少随机tmp文件

时间:2013-04-29 03:50:46

标签: ruby-on-rails heroku imagemagick image-manipulation carrierwave

在我的RoR项目中,我正在使用CarrierWave + MiniMagick并部署到Heroku进行制作。

我在制作中遇到这个问题,有时图像处理缺少tmp文件。我收到这个错误:

Errno::ENOENT: No such file or directory - /tmp/mini_magick20130319-2-3wq6l6.jpg

我有其他的XUploader类可以工作但是这个特殊的有两个图像处理。最初我有两个单独的过程:

  process :resizer
  def resizer
    resize_to_fit(model.jrac_image_width, model.jrac_image_height)
  end

  process :cropper
  def cropper
    manipulate! do |img|
      img.crop("442x190+#{model.jrac_crop_x}+#{model.jrac_crop_y}")
      img
    end
  end

但是它说:cropper上有错误说tmp文件不存在。我试图将代码更改为此,希望它只能在其上运行一次:

  process :resize_and_crop
  def resize_and_crop
    manipulate! do |img|
      img.resize("#{model.jrac_image_width}x#{model.jrac_image_height}") # resize_to_fit
      img.crop("442x190+#{model.jrac_crop_x}+#{model.jrac_crop_y}") # cropper
      img
    end
  end

但不幸的是,仍然遇到同样的错误。

有谁知道问题出在哪里?我不知道它是用Heroku还是CarrierWave或ImageMagick?

修改

我的Uploader课程

上也有此代码
  def cache_dir
    "#{Rails.root}/tmp/uploads"
  end

至于此document

1 个答案:

答案 0 :(得分:0)

heroku会不时清空tmp,通常,我们使用s3或其他云存储来存储处理后的版本。你可以参考https://github.com/jnicklas/carrierwavehttps://github.com/jnicklas/carrierwave/wiki/How-to%3A-Make-Carrierwave-work-on-Heroku

他们详细介绍了如何在heroku中使用carrierwave 我之前尝试过它并且有效