我覺得這將在facepalm時刻結束,但我一直在我的頭上打了太久。頻繁的「沒有這樣的文件或目錄」,同時通過回形針保存文件
我有一個Rails seed.rb文件從一個特定的目錄中創建的每個文件的新對象,並通過節省回形針的文件獲取的所有文件:
Dir["./**/*.jpg"].each do |f|
...
p = Picture.new
File.open(f, 'r') { |photo_file| p.photo = photo_file }
p.save!
....
end
其中photo
是回形針分配屬性(picture.rb):
has_attached_file :photo,
:styles => { :medium => "500x500>", :thumb => "100x100#" },
:processors => [:rotator]
我的問題是在一些數量的文件(有時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/[email protected]/bundler/gems/paperclip-61f74de14812cabc026967a2b2c3ca8cbd2eed69-master/lib/paperclip/storage.rb:42:in `block in flush_writes'
我想也許我沒有關閉文件,但根據Ruby IO docs使用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次的地方。我不確定我在做什麼來使其「重置」和處理更多。但我認爲這是關鍵。
很難說,但我會添加類似' 「do-end塊中的」Rails.logger.debug(f)「',這樣文件名就會出現在日誌中。你或許可以弄清楚是什麼原因造成的。 – Karl 2010-07-16 22:00:38
@Karl對於失敗的文件我沒有看到任何突出的東西。事實上,重新運行腳本首先處理失敗的文件,並且工作正常。 – pcg79 2010-07-18 19:30:03