耙一次迁移

Ano*_*non 87 database migration rake ruby-on-rails

我试图在我的rails应用程序中运行一大堆迁移.我怎样才能做到这一点?我不希望在它之前或之后运行任何迁移.谢谢.

Rya*_*igg 159

rake db:migrate:redo VERSION=xxxxxxx,但那将运行down然后up步骤.您可以结合暂时注释掉向下步骤来执行此操作.

  • 为了扩展Ryan所说的内容,如果表已经从Rails之外的数据库中删除,那么`rake db:migrate:up VERSION = my_version`可以执行_nothing_,因为schema_migrations表仍然表示它已经运行了.在相同的情况下`rake db:migrate:redo VERSION = my_version`可能_fail_因为它不能删除表.在这种情况下,暂时注释掉迁移中的`down`方法并重新运行`rake db:migrate:redo ... (9认同)
  • @pedrorolo:这不是过时的.这个任务没有描述,所以它不会出现在`rake -T`中. (3认同)
  • 并且要扩展@Leo所说的内容,如果使用def更改定义了迁移,那么除了上述内容之外,还要将其更改为def self.up. (3认同)

Sha*_*ell 69

rake db:migrate:up VERSION=1234567890
Run Code Online (Sandbox Code Playgroud)

类似于rake db:migrate:down采取特定的迁移.您可以获得可用的rake任务列表rake -T.

  • 这里提到的`VERSION`是每个迁移文件开头的整数值(这只是它创建时的时间戳).例如,`VERSION = 20150720023630`. (4认同)
  • 使用rake db:migrate:status可以很好地显示这些版本 (3认同)

小智 25

我必须运行一个已更改的迁移,并且需要独立于所有其他迁移重新运行.启动控制台并执行以下操作:

>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
Run Code Online (Sandbox Code Playgroud)

更有用的是,这可以用于rake任务等.

  • 这非常有效.您也可以将迁移中的代码复制粘贴到控制台中以定义类(如果需要,可以根据需要进行手动操作,例如,如果您在Dev上犯了错误).如果您使用`change`定义了可逆迁移,请改为运行`YourMigrations.migrate(:up)`(或者`:down`!) (6认同)

res*_*hma 11

rake db:migrate:up VERSION=version_no

将迁移(添加)特定的迁移脚本

rake db:migrate:down VERSION=version_no

将删除特定的迁移脚本


JP *_*shy 9

rake db:migrate VERSION=20098252345
Run Code Online (Sandbox Code Playgroud)

尝试一下.

  • 我认为这将运行任何迁移,直到您指定的迁移. (6认同)
  • 我不认为您应该/只想运行一次迁移而不考虑之前的迁移.迁移是数据库结构的表示,因为它与给定时间点的代码相关,因此必须进行迁移.如果您只想运行_one_ migration,那么您可能没有编写正确的向上/向下操作来保持迁移功能......这只是编写迁移的坏习惯. (6认同)

hex*_*ter 5

rake db:migrate:redo version='xxxx'   
Run Code Online (Sandbox Code Playgroud)

请记住在 xxxx 两边加上引号,xxxx 是迁移的时间戳(或迁移 ID)。

您可以使用以下命令检查之前完成的迁移的时间戳(迁移 ID)

rake db:migrate:status    
Run Code Online (Sandbox Code Playgroud)