2011-03-07 65 views
2

我的應用程序處於測試階段,並且我一直在對涉及新模型的功能進行有限測試。經過相當數量的測試之後,我必須進行結構更改,使舊數據無法使用。刪除並重新創建單個表格(在Heroku上)

我需要做的就是刪除並重新創建一個表格。我知道我可以在遷移中做到這一點,但這似乎是這樣的黑客攻擊。在本地開發副本中,我只會使用db:reset,但在測試版應用程序中,我不想在除此之外的任何表中丟失數據。

這是一種指導生產應用程序刪除並重新創建單個表的簡單方法。就我而言,我正在使用Heroku進行部署,以防影響您如何解決此問題。

回答

6

要清空在Heroku上表不改變模式,在您的應用程序的目錄:

$ heroku run console 
Ruby console for myap.heroku.com 
>> ModelName.delete_all 
>> exit 
+0

謝謝,這項工作完美,似乎比刪除/重新創建遷移更直接。出於好奇,這是否也會重置ID自動遞增回1?這不是必需的,但是如果第一個記錄(後擦除)仍然以ID開頭,那麼它會感覺更乾淨:1 – Andrew 2011-03-09 04:23:03

+1

@Andrew我相信truncate是您要查找的sql命令。 Docs at http://www.postgresql.org/docs/9.1/static/sql-truncate.html – Ameen 2013-11-25 05:20:39

+0

在heroku上,您現在使用「heroku run rails console」 – 2014-04-24 22:21:54

1

我知道我可以在遷移中做到這一點,但看起來像這樣的黑客攻擊。

這不是黑客。這正是遷移的目的。

+0

即使你沒有改變模式,只是「重新創建」一個表? – Andrew 2011-03-07 20:18:32

+1

@Andrew我以爲你說你做了結構性的改變,使舊數據無法使用?所以模式會有所不同,對吧? – ghoppe 2011-03-07 20:36:09

+0

我想我的意思是,這種模式通過幾種遷移而演變,使舊數據不再具有完整的功能。現在的模式是正確的,但是一些關聯等發生了變化,舊數據有時會引發異常。 – Andrew 2011-03-07 23:25:19

0

您需要重新運行該表進行結構性改變的遷移。我之前沒有使用過ActiveRecord,但我也會使用heroku控制檯中的ModelName.delete_all刪除表中的數據。

0
heroku run console 
irb(main):001:0> ModelName.delete_all 

然後你就完成了。

相關問題