2011-03-31 16 views
0

上週我們部署了一個應用程序。問題是我們有一些我們想要遷移到生產的開發數據,但生產數據庫已經在使用。所以只需導入和導出SQL就會產生ID不再匹配的問題。將開發數據合併到生產數據中

現在,我已經想到了急於將所有數據加載到基礎對象中,但沒有一個基礎對象這樣的事情。有四個只有has_many關聯的對象和很多具有多個belongs_to關聯的對象。

有沒有其他的導出和導入方法可以用來實現我們想要的功能?

回答

0

一種方法可能是將開發數據轉儲到yaml(this plugin does that,可能還有其他方法可以解決這個問題),然後使用db/seeds.rb編寫腳本加載其內容並使用rails模型重新創建他們在生產分貝耙分貝:種子

耙分貝:種子不會軟管您的數據(它只是加載DB/seeds.rb,看到源herehere),但一定要備份之前,您的數據任何東西:)

我建議在繼續前進行並在生產環境中運行這個應用程序之前,先玩一個沙箱應用程序和db克隆。

+0

我不確定,但我會認爲DB Seed不會與現有數據一起工作。我會很緊張,你會失去現有的數據。 – Andrew 2011-04-01 05:22:14

+0

rake db:種子本身不會吸取任何現有的數據,它只是加載db/seeds.rb,它只是一個可以訪問應用程序環境的腳本。沒有什麼能夠防止它加載yaml夾具。這裏是任務的來源:https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L286 – oliverbarnes 2011-04-01 13:09:11

+0

無論如何,一定要備份你的數據:)並且我' d建議在開始之前先使用沙盒應用程序和db克隆,然後在生產環境中運行此應用程序。在控制檯中運行語句首先可以幫助將腳本放在一起 – oliverbarnes 2011-04-01 13:15:31

0

將開發數據導出爲CSV,yaml,XML或您希望用於此目的的任何格式。然後你可以選擇做什麼:

如果只導入一次數據,那麼你可以使用遷移從指定的文件加載數據。當您將其簽入源代碼管理時,請務必在遷移時包含這些文件。

使用控制檯(腳本/控制檯製作)加載數據並手動輸入命令。這可能是一個更好的方法,因爲您可以檢查正在進行的數據並根據需要進行調整。

如果你打算多做一次,然後編寫一個rake任務,當給定文件名或其他標識符時將數據加載到數據庫中。

+0

我認爲我們的數據對於這個解決方案有點太複雜。例如,我們有一個有250個記錄的模型,其中有8個belongs_to關聯。在應用程序中重新創建數據本身比在控制檯中手動創建數據要容易得多。不過,你確實給了我一個想法,我稍後會詳細說明。 – 2011-04-02 09:26:38

相關問題