耙只是一个迁移

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

rake db:migrate:redo VERSION=xxxxxxx ,但是会运行down ,然后up运行。 你可以在临时注释掉下面的步骤的同时做到这一点。

 rake db:migrate:up VERSION=1234567890 

同样rake db:migrate:down采取特定的迁移。 你可以用rake -T得到一个可用的rake任务列表。

我必须运行一个单独的迁移,并且需要独立于所有其他迁移来重新运行。 启动控制台并执行此操作:

 >> require 'db/migrate/your_migrations.rb' => ["YourMigrations"] >> YourMigrations.up => etc... as the migration runs >> YourMigration.down 

更有用的是,这可以放在一个耙子任务等。

 rake db:migrate VERSION=20098252345 

给一个尝试。

rake db:migrate:up VERSION=version_no

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

rake db:migrate:down VERSION=version_no

将删除特定的迁移脚本

通过上面的korch扩大答案, require没有为我工作,但load 。 具体来说,对于迁移文件:

  class ChangeMinQuantityToRaces < ActiveRecord::Migration def change change_column :races, :min_quantity, :integer, :default => 0 end end 

在控制台input

  > load 'db/migrate/30130925110821_change_min_quantity_to_races.rb' > ChangeMinQuantityToRaces.new.change 

为我工作。

  > Race.new.min_quantity # => 0 

这是ruby1.9.3p484(2013-11-22修订版43786)[x86_64-linux]和Rails 3.2.13。

 rake db:migrate:redo version='xxxx' 

请记住将引号标记为xxxx,xxxx是迁移的时间戳(或迁移标识)。

您可以检查您使用的先前迁移的时间戳(迁移ID)

 rake db:migrate:status 

我有一个实用的方法,使得这非常容易开发。 我发现它可以帮助我避免创build太多的迁移 – 通常我修改迁移直到部署完成。

http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/

添加我的2¢,因为我遇到了同样的问题:

如果您完全想要在不创build新迁移的情况下运行迁移,则可以执行以下操作:

rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';

而rails会“忘记”它运行的是20150105181157的迁移。现在当你运行db:migrate时,它会再次运行它。

这几乎总是一个坏主意。 可能有意义的一个例子是,如果你有一个开发分支,而且你还没有充实你的迁移,并想在开发中添加一些东西。 但即使如此,最好还是进行双向迁移,以便可以正确回滚并重复执行。

有一个方法可以通过控制台运行迁移类。 我似乎无法让迁移代码被识别。

但是,如注释所示,最好按顺序运行迁移。 使用:

 rake db:migrate VERSION=########## 

将代码复制并粘贴到脚本/控制台的迁移中?

我在开发过程中使用了这种技术,而且我不希望大量迁移并丢失任何数据(特别是在导入遗留数据需要很长时间的情况下我不想再重新导入)。

这是100%的骇人听闻,我绝对不会build议在生产中这样做,但它会做的伎俩:

  1. 将您想要从其目录中重新运行的迁移移到临时位置
  2. 使用相同的名称生成另一个迁移
  3. 将原始迁移代码复制/粘贴到新生成的迁移文件中
  4. 运行新的迁移
  5. 删除新生成的迁移文件
  6. 编辑模式迁移以删除最近的值
  7. 还原旧的迁移文件