Rails文件I / O:在Ruby中有效的东西在Rails中不起作用?

时间:2010-06-25 14:31:32

标签: ruby file-io ruby-on-rails

所以,我写了一个简单的Ruby类,并把它放在我的rails / lib目录中。该类有以下方法:

def Image.make_specific_image(paths, newfilename)
  puts "making specific image"
  @new_image = File.open(newfilename, "w")
  puts @new_image.inspect
  @@blank.each(">") do |line|
    puts line + "~~~~~"
    @new_image.puts line
    if line =~ /<g/
      paths.each do |p|
        puts "adding a path"
        puts p
        @new_image.puts p
      end
    end
  end    
end

创建新文件,并将硬编码字符串(@@blank)复制到此文件,在特定位置添加自定义内容(在找到g标记后)。

如果我从ruby运行此代码,一切都只是很好。

然而,如果我从rails运行此代码,文件将获得CREATED,但随后为空。我已经检查了代码的每一行:我试图写入文件的内容是零,但文件仍然是空的。

我真的很难过。这是权限吗?如果是这样,为什么在EARTH上Rails会拥有制作文件所需的权限,但是不会写入它所创建的文件?

文件I / O在rails中的工作方式有所不同吗?

具体来说,我有一个调用的模型方法:

Image.make_specific_image(paths, creature.id.to_s + ".svg")

成功生成类型为“47.svg”的文件为空。

2 个答案:

答案 0 :(得分:3)

在您完成编写后,您是否尝试在文件上调用close? (您也可以使用基于块的File.open语法,一旦块完成,它将自动关闭)。我猜测问题是写入没有刷新到磁盘。

答案 1 :(得分:0)

所以

显然文件I / 0可以在Rails中工作......只是非常非常慢。在Ruby中,只要我查看文件,它就在那里,它有效,一切都很漂亮。

之前,在看到Rails中的空白文件之后,我会感到沮丧,然后删除文件,更改一些代码并再试一次(以免充满垃圾邮件,因为每个文件都是在生物创建时发生的,所以我很快就会有很多文件,如“47.svg”和“48.svg”等。

....因此。我休息了一下,回来看看我是否可以判断rails生成文件的权限是否与ruby生成的文件不同...并注意到RAILS文件不再是空白。

看起来大约需要五分钟让rails最终写入文件,即使它声称它已经完成了对整个调用的处理。 Ruby需要几秒钟。不确定为什么它们如此不同,但至少现在我知道它不是权限的东西。

编辑:实际上,在某些文件上需要很长时间,其他文件是即时的......