2014-07-13 75 views
1

在开发heroku应用程序之前,启动之前,我一直保持我的迁移到2个文件(创建用户,创建文章),而不是每次添加新的迁移改变表格的结构(在这一点上可能会有20次迭代)。数据库中没有数据。重新运行Heroku上的所有数据库迁移(rake db:migrate:reset)

我该怎么做rake db:migrate:reset在Heroku上的等价物? Heroku不允许这样做。我想我可以做heroku pg:reset,然后rake db:migrate,但这似乎并没有重新运行旧的迁移。同样,Heroku的数据库中没有数据,因此可以丢弃它。

迁移:

  • 2014070781234_create_users_table 我在此 迁移加入一列。它已经在heroku上运行过了。我如何重新运行它,以便更新表格 ?
  • 2014070789999_create_posts_table
+0

你运行过吗'heroku运行rake db:migrate'或者只是rake db:migrate? – Mandeep

+0

我已经运行'heroku run rake db:migrate'。不过,我不相信重新执行旧的迁移。 (请参阅上文,我试图重新运行已经运行的迁移) –

回答

7

你不应该已经被迁移在迁移文件的更改。如果你看一下docs它说

In general, editing existing migrations is not a good idea. You will be creating extra work for yourself and your co-workers and cause major headaches if the existing version of the migration has already been run on production machines. Instead, you should write a new migration that performs the changes you require

你应该

rails g migration AddColumnNameToUsers column_name:type 

创建一个新的迁移文件,这会产生这样一个迁移文件:

class AddColumnNameToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :column_name, :type 
    end 
end 

然后您就可以只需运行heroku运行rake db:migrate

如果您仍然想删除从Heroku的数据库,那么你需要做的:

heroku pg:reset DATABASE_URL --confirm nameofapp 

然后Heroku上运行耙分贝:迁移。详情结帐heroku docs

+1

感谢Mandeep,在这种情况下,我选择了避免大量迁移文件来支持此方法。我只是一个人工作,发现在数据库中有数据之前,这会变得更清洁。 –

+0

@DonnyP好吧!你可以通过使用'heroku pg:reset DATABASE_URL --confirm nameofapp'来重置你的数据库。 – Mandeep

+0

这个“heroku pg:reset DATABASE_URL --confirm nameofapp”和“heroku rake db:migrate:redo”有什么区别? – bitfrost41

相关问题