Я чувствую, что это закончится через мгновение, но я слишком долго стучал по нему головой.
У меня есть файл Rails seed.rb, который получает все файлы из определенногокаталог, создающий новый объект для каждого файла и сохраняющий файл с помощью Paperclip:
Dir["./**/*.jpg"].each do |f|
...
p = Picture.new
File.open(f, 'r') { |photo_file| p.photo = photo_file }
p.save!
....
end
, где photo
- это атрибут, назначенный Paperclip (picture.rb):
has_attached_file :photo,
:styles => { :medium => "500x500>", :thumb => "100x100#" },
:processors => [:rotator]
Myпроблема в том, что после некоторого количества файлов (иногда 50, иногда 2) скрипт завершается со следующей ошибкой:
No such file or directory - /var/folders/oD/oDq1WD11EEaXmfi8VfNvfE+++TM/-Tmp-/stream,22423,0,22423,0
/Users/patgeorge/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/fileutils.rb:1407:in `stat'
/Users/patgeorge/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/fileutils.rb:1407:in `block in fu_each_src_dest'
/Users/patgeorge/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/fileutils.rb:1423:in `fu_each_src_dest0'
/Users/patgeorge/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/fileutils.rb:1405:in `fu_each_src_dest'
/Users/patgeorge/.rvm/rubies/ruby-1.9.2-head/lib/ruby/1.9.1/fileutils.rb:504:in `mv'
/Users/patgeorge/.rvm/gems/ruby-1.9.2-head@rails3/bundler/gems/paperclip-61f74de14812cabc026967a2b2c3ca8cbd2eed69-master/lib/paperclip/storage.rb:42:in `block in flush_writes'
Я подумал, что, возможно, я не закрывал файл, но в соответствии с Документы Ruby IO , использующие блок из open
, закроют файл.
Очевидно, я не вижу необходимости часто запускать это, так что это не большая проблема.Это просто расстраивает и сбивает с толку.
Я использую Ruby 1.9.2 r28142, Rails 3.0.0.beta4 и Paperclip 2.3.3.
Дополнительно:
При попытке Уинфилда мой блок кода теперь выглядит следующим образом:
Dir["./**/*.jpg"].each do |f|
...
File.open(f, 'r') do |photo_file|
p = Picture.new
p.photo = photo_file
p.save!
end
...
end
Тем не менее периодически появляется ошибка.
Еще больше информации :
Я заметил, что при первом запуске скрипта он может создавать большое количество файлов (12 или около того).Поскольку я продолжаю его запускать, число уменьшается до уровня, когда я могу сделать только 2 за раз.Я не уверен, что я делаю, чтобы сделать это "сбросить" и обрабатывать больше.Но я думаю, что это ключ.