频繁的“没有这样的文件或目录”,同时通过回形针保存文件
我觉得这将在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次的地方。我不确定我在做什么来使其“重置”和处理更多。但我认为这是关键。
回答:
这只猴子补丁解决了这个问题:
http://github.com/thoughtbot/paperclip/issues/issue/262/
回答:
它确实在我看来,像你正在关闭你打开的文件句柄,然后再将它读入回形针。
带有块的File.open()打开文件,将其传递到块,并在块执行后关闭它。这意味着它可能在您致电p.save之前关闭!
尝试做所有你的照片创作的文件块中:
File.open(f, 'r') {|photo_file| Picture.create!(:photo => photo_file) }
以上是 频繁的“没有这样的文件或目录”,同时通过回形针保存文件 的全部内容, 来源链接: utcz.com/qa/262171.html