所以,我写了一个简单的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”的文件为空。
答案 0 :(得分:3)
在您完成编写后,您是否尝试在文件上调用close? (您也可以使用基于块的File.open语法,一旦块完成,它将自动关闭)。我猜测问题是写入没有刷新到磁盘。
答案 1 :(得分:0)
所以
显然文件I / 0可以在Rails中工作......只是非常非常慢。在Ruby中,只要我查看文件,它就在那里,它有效,一切都很漂亮。
之前,在看到Rails中的空白文件之后,我会感到沮丧,然后删除文件,更改一些代码并再试一次(以免充满垃圾邮件,因为每个文件都是在生物创建时发生的,所以我很快就会有很多文件,如“47.svg”和“48.svg”等。
....因此。我休息了一下,回来看看我是否可以判断rails生成文件的权限是否与ruby生成的文件不同...并注意到RAILS文件不再是空白。
看起来大约需要五分钟让rails最终写入文件,即使它声称它已经完成了对整个调用的处理。 Ruby需要几秒钟。不确定为什么它们如此不同,但至少现在我知道它不是权限的东西。
编辑:实际上,在某些文件上需要很长时间,其他文件是即时的......