2011-08-06 101 views
8

我正在使用Ruby on Rails,並且我不再需要我的表Order所以我使用SQLite管理器將其刪除。我如何使表刪除發生在heroku中?Heroku Drop Table Rails幫助

編輯 我收到錯誤

db/migrate/20110806052256_droptableorders.rb:10: syntax error, unexpected keyword_end, expecting $end 

當我運行命令

class DropTableOrder < ActiveRecord::Migration 
    self.up 
     drop_table :orders 
    end 

    self.down 
     raise IrreversibleMigration 
    end 
end 

回答

3

只需創建這樣一個遷移:

def self.up 
    drop_table :orders 
end 

def self.down 
    # whatever you need to recreate the table or 
    # raise IrreversibleMigration 
    # if you want this to be irreversible. 
end 

,然後做一個heroku rake db:migrate的下次你推動你的改變。

您可能想要在SQLite中重新創建表,以便您也可以在本地運行此遷移。

+0

我收到一個錯誤。 == DropTablesMigration:遷移============================================ - drop_table(:order) rake中止! 發生錯誤,此次和所有後來的遷移取消: PGError:錯誤:表「訂單」不存在 :DROP TABLE「訂單」。但我的桌面訂單仍然存在 – Jake

+0

@Jake:對不起,錯字,它應該是':orders'而不是':order'。 –

+0

我在我的本地服務器上重新創建了「訂單」表,並嘗試使用您的命令將其刪除。你可以請檢查我的編輯頂部爲 – Jake

21

如果您不想創建向drop table的遷移並且無法回滾以前的遷移,因爲您不想丟失遷移後創建的表中的數據,則可以在heroku控制檯上使用以下命令刪除表格:

$ heroku console 
Ruby console for heroku-project-name 
>> ActiveRecord::Migration.drop_table(:orders) 

以上命令將從您的heroku數據庫中刪除該表。您可以在ActiveRecord :: Migration模塊中使用其他方法(如create_table,add_column,add_index等)來操作數據庫,而無需創建和運行遷移。但需要警告的是,這將在Rails爲管理遷移版本而創建的schema_migrations表中留下一片混亂。

如果您的應用程序仍處於開發階段並且您不想丟失已添加到heroku遠程登臺服務器上的數據,那麼這個功能纔有用。

+1

我發現這很有用,當我在開發和推/拉數據庫,並以某種方式將其提升並遷移死亡。這個命令就像一個魅力,謝謝! – rtfminc

+0

偉大的提示!我真的必須更頻繁地閱讀Rails源碼 – gcahill

+0

你真是太棒了。 +1 – Trip

6

,可執行以下command.Here 'ABC' 是應用程序的名稱

heroku run console --app abc 

然後使用,

ActiveRecord::Migration.drop_table(:orders) 

它會刪除表 '秩序'。