2013-10-08 3 views
7

мне нужно использовать tmp папку на Heroku (кедр) для написания некоторых временно данные, я пытаюсь сделать это таким образом:Heroku - как записать в каталог «tmp»?

open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file| 
    file.write open(image_url).read 
end 

Но эта ошибка плодоовощного

Errno::ENOENT: No such file or directory - /app/tmp/image-2.png 

Я пытаюсь этот код, и он работает правильно на localhost, но я не могу заставить его работать на Heroku.

Каким образом можно сохранить некоторые файлы в каталоге tmp на Heroku (стек кедра)?

Спасибо

EDIT: Я метод работаю с замедленной Работой, которая должна имеет доступ к файлу TMP.

EDIT2: Что я делаю:

files.each_with_index do |f, index| 
     unless f.nil? 
     result = JSON.parse(buffer) 
     filename = "#{Time.now.to_i.to_s}_#{result['filename']}" # thumbnail name 
     thumb_filename = "#{Rails.root}/tmp/#{filename}" 

     image_url = f.file_url+"/convert?rotate=exif" 

     open("#{Rails.root}/tmp/#{result['filename']}", 'wb') do |file| 
      file.write open(image_url).read 
     end 

     img = Magick::Image.read(image_url).first 
     target = Magick::Image.new(150, 150) do 
      self.background_color = 'white' 
     end 
     img.resize_to_fit!(150, 150) 
     target.composite(img, Magick::CenterGravity, Magick::CopyCompositeOp).write(thumb_filename) 

     key = File.basename(filename) 
     s3.buckets[bucket_name].objects[key].write(:file => thumb_filename) 

     # save path to the new thumbnail to database 
     f.update_attributes(:file_url_thumb => "https://s3-us-west-1.amazonaws.com/bucket/#{filename}") 
     end 
    end 

Я имею в базе данных информации о снимках. Эти изображения хранятся в ведро Amazon S3. Мне нужно создать миниатюры для этих изображений. Таким образом, я просматриваю одно изображение другим, загружаю изображение, временно сохраняю его, а затем меняю его размер, а затем загружаю этот миниатюра в ведро S3.

Но эта процедура, похоже, не работает на Heroku, так как я могу это сделать (мое приложение работает на Heroku)?

+0

Поскольку он говорит, что нет никакого каталога в этом патче, может быть, вы должны создать он перед использованием? Или вы хотите знать, где стандартный tmp на героку? – fotanus

+0

имейте в виду, что у героку есть серьезные ограничения на файловую систему! https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem – phoet

+0

Даже если запрос к приложению создал файл tmp, файл, скорее всего, исчезнет, ​​если последующие задания появятся позже. – spickermann

ответ

9

Есть /tmp входит в ваш git repo? Удалено в .slugignore? Каталог может просто не существовать на Heroku.

Try бросание в быстрой MKDIR перед записью:

Dir.mkdir(File.join(Rails.root, 'tmp')) 

Или даже в инициализаторе или что-то ...

+6

'Rails.root.join ('tmp')' – phoet

+0

Приятно, я не понимал, что 'root' был« Pathname ». Даже лучше. –