频繁的“没有这样的文件或目录”,同时通过回形针保存文件

我觉得这将在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

回到顶部