2016-11-06 78 views
1

我想在運行時使用ActiveRecord刪除並設置我的rails db。什麼是最好的方式來做到這一點?我假設我需要刪除現有的連接,並重新連接?如何在運行時從Rails中刪除,創建和遷移數據庫?

有沒有人有這樣做的經驗,你可以分享哪些步驟涉及到正確地做?

+0

這是不是隻會崩潰應用程序? –

+0

@DavidAldridge這是一個內部培訓應用程序,所以應該沒問題。可以做到這一點,而無需重新啓動rails? – Nathan

+0

也許你可以通過截斷所有表來逃脫...... *可能*刪除並重新創建它們,但刪除db聽起來很棘手。我認爲你需要重新啓動應用程序,即使你正在創建一個新的數據庫來連接而不是僅僅刪除當前的數據庫。如果我們知道這是什麼目的,可能會有所幫助。 –

回答

0

我沒有太多的運氣,做典型的下降,創建,遷移的運行時,所以我用了下面的方法(@David Aldridge建議):

connection ||= ActiveRecord::Base.connection 
connection.tables.each do |t| 
    connection.execute("TRUNCATE \"#{t}\" RESTART IDENTITY CASCADE") unless t == 'schema_migrations' 
end 

我應該首先提到我使用的是postgres。

我之前遇到過的問題是,我被分區中的索引限制阻止,但使用CASCADE參數解決了這個問題。

CASCADE允許關聯表也被截斷 - 實質上繞過約束 RESTART IDENTITY允許將表增量重置爲零。

0

你可以很容易地使用這些命令rake db:drop,rake db:create,rake db:migrate,但這是你真正想要的嗎?有關這個命令的更多信息,請看這裏 - >Difference between rake db:migrate db:reset and db:schema:load

+0

我認爲你誤解了這個請求。他希望在他的應用程序運行時執行這些操作*。 – MarsAtomic

+0

假設您對視圖進行了更改。只要做@vlad說的話,重新加載頁面就不需要斷開或重新連接任何東西 – christoandrew

+0

嗯,第一個障礙是db(在這種情況下,postgres)抱怨現有的連接,所以它不能執行這些操作。我可以使用AR刪除數據庫連接。然後,我可以使用'Rake :: Task ['db:drop']。invoke'等來執行這些操作,但重新連接到數據庫似乎不能正常工作。 – Nathan

相關問題