2010-06-25 45 views
1

所以,我寫了一個簡單的Ruby類,並將其放在我的rails/lib目錄中。這個類有以下方法:Rails文件I/O:Ruby中的哪些功能在Rails中不起作用?

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)這個文件,添加在某個位置自定義內容(A G標記後發現)。

如果我從ruby運行此代碼,一切都只是桃色。但是,如果我從rails運行此代碼,文件將獲得CREATED,但是然後是空的。我檢查了代碼的每一行:我試圖寫入文件的內容都是零,但文件仍然是空的。

我真的很難過。這是一個權限的東西嗎?如果是這樣的話,爲什麼在EARTH上Rails會擁有製作文件所需的權限,但是不會寫入它所創建的文件?

文件I/O以某種方式以不同方式在rails中工作嗎?

具體而言,我有一個調用一個模型的方法:

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

這成功地使型「47.svg」,也就是空的一個文件。

+0

你確定當你在Rails下運行時,@@ blank'不是,呃,空白嗎?你確定'@ new_image'在Rails下被刷新並關閉了嗎? – pilcrow 2010-06-25 17:01:41

+0

是的,我正在打印出一行(這是@@空格的一部分,它具有我期望的部分)。其實,我想我想通了,會發佈一個答案.... – Jenny 2010-06-25 17:07:38

回答

3

您是否嘗試過的文件調用close你寫完之後? (您也可以使用基於塊的File.open語法,一旦塊完成,它將自動關閉)。我猜測問題是寫入沒有被刷新到磁盤。

+1

你先生,救了我很大的挫折。我甚至沒有在api中看到File.close方法,所以我甚至沒有想到我應該這樣做。 Rails的表現現在和Ruby一樣快。謝謝! – Jenny 2010-06-25 18:39:12

0

所以。

顯然文件I/0在Rails中工作......非常非常緩慢。在Ruby中,只要我去看文件,它就在那裏,它可以工作,一切都很漂亮。

之前,在看到Rails的空白文件之後,我會感到沮喪,然後刪除文件,並更改一些代碼,然後再試一次(以免垃圾被填滿,因爲每個文件都是在生物創建過程中生成的,所以我很快就會得到很多像「47.svg」和「48.svg」等文件。

....所以,我帶了我的午餐休息時間,回來看看我是否可以告訴如果rails生成的文件的權限不同於ruby生成的文件...注意到RAILS文件不再空白

似乎需要大約五分鐘的時間才能最終寫入文件,即使在它之後聲稱它已經完成了整個呼叫的處理過程幾秒鐘。不太確定爲什麼他們如此不同,但至少現在我知道這不是一個權限問題。

編輯:其實,在一些文件需要很長時間,其他都是瞬間......

相關問題