2010-06-21 19 views
0

我發現這樣的寶石一整天,但沒有找到一個好的。我想寫一篇,但我無法做到。有沒有任何寶石可以從yml文件轉儲數據?

我的數據庫中的數據可能是英文文本,將以純文本形式轉儲到yml文件。還有一些是非英文文本,它將是二進制類型。

而且兩者可能有這樣的代碼:

<% xxx %> 

當我使用rake db:fixtures:load將它們加載到數據庫中,可能會出現錯誤:method xxx not found

我不想找到一個好的寶石可以處理這個問題。感謝所有幫助


UPDATE

我已經放棄了找到這樣的寶石。起初,我認爲這是一件容易的事情,但現在,經過一番調查後,我不得不說,這比我想象的要困難得多。

回答

1

你有問題的原因是因爲在加載數據之前,Fixture加載器會通過erb傳遞你的夾具。這意味着如果你的yaml文件中有<%xxx%>,那麼Rails會將其視爲erb並嘗試運行一個名爲xxx的方法。

似乎並沒有簡單的方法來關閉erb處理燈具。我試圖用CSV裝置替換燈具,這仍然是ERB預處理。

沒有一個簡單的答案我必須問這個問題爲什麼你的文件中有這些字符串?

你想讓它們被erb擴展嗎?

+0

我同意你的看法,我嘗試了很多,發現解決這個問題是不可能的(如果內容是英文和簡短的,to_yaml()將使用純文本,如果內容不是英文,to_yaml將使用二進制。更換不起作用)。 – Freewind 2010-06-27 05:48:28

+0

我的文件包含這樣的字符串,因爲數據庫中的內容是一些代碼,它包含這樣的erb代碼。我希望'rake db:dump:fixtrues'不要把它們當作erb。 – Freewind 2010-06-27 05:49:58

+0

我希望將數據庫的所有數據轉儲到yml文件,並將它們加載回去。但是現在,我不得不說,這是一個非常困難的任務(例如,序列不會轉儲到文件,當您加載時,數據庫的序列將具有無效的當前值)。所以我放棄了,轉而使用數據庫備份/恢復工具。 – Freewind 2010-06-27 05:52:58

1

錯......我不確定你是否真的需要這個寶石?本地Rails可以將任何模型轉換爲YAML。

假設您有一個名爲「Objects」的模型。你可以打,看起來像一個路線:

/objects.yaml 

,你會得到YAML形式,所有對象的一個​​巨大的文本文件。

當然,你會希望有這樣的事情:在你的寧靜控制器

respond_to do |format| 
    format.yaml {render :yaml => @objects} 
end 

如果你不想打這樣做的路線,你總是可以做

@yaml = [] 
@objects.each do |object| 
@yaml.push object.to_yaml 
end 

在任何地方的紅寶石,它會給你YAML對象的數組,然後你可以寫一個文件在你的休閒。

我想如果rails自己生成yaml,那麼它將能夠稍後將它加載爲一個fixture?

+0

當我將數據庫轉儲到yaml文件時,我在rails環境中使用'object.to_yaml'。但是,不幸的是,當加載回來時,rails會將其視爲erb代碼,而不是純文本。我放棄了尋找這樣的寶石,也許這是不可能完成的任務。謝謝你的回答。 – Freewind 2010-06-27 05:57:16