是否有一种简单的方法来运行单个迁移?我不想迁移到某个版本,我只想运行一个特定的版本。


当前回答

至于rails 5,你也可以使用rails来代替rake

Rails 3 - 4

# < rails-5.0
rake db:migrate:up VERSION=20160920130051

Rails 5

# >= rails-5.0
rake db:migrate:up VERSION=20160920130051

# or

rails db:migrate:up VERSION=20160920130051

其他回答

这是再次运行迁移文件“20150927161307_create_users.rb”的步骤

运行控制台模式。(rails c) 将该文件中的类复制到控制台。 类CreateUsers < ActiveRecord::Migration def变化 Create_table:users do |t| t.string:名字 t.string:电子邮件 T.timestamps null: false结束 结束 结束 结束 创建CreateUsers类的实例:c1 = CreateUsers.new 执行该实例的方法更改:c1.change

如果你已经实现了这样一个change方法:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
  end
end

你可以创建一个迁移实例,并在实例上运行migrate(:up)或migrate(:down),如下所示:

$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)

方法一:

rake db:migrate:up VERSION=20080906120000

方法2:

在Rails控制台中 1. 在控制台复制粘贴迁移类(例如add_name_to_user.rb) 2. 然后在控制台输入以下命令

Sharding.run_on_all_shards{AddNameToUser.up}

结束了!!

你可以直接从ruby文件中运行代码:

rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.new.up

注意:非常老版本的rails可能需要addfoo。up而不是addfoo .new.up。

另一种方法(没有IRB)依赖于require返回类名数组的事实:

script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'

注意,如果这样做,就不会更新schema_migrations表,但这似乎正是您想要的结果。

此外,如果无法找到文件,您可能需要使用require("./db/…"或根据您的工作目录尝试require_relative

如果你想从控制台运行它,这是你要找的:

$ rails console
irb(main)> require "#{Rails.root.to_s}/db/migrate/XXXXX_my_migration.rb"
irb(main)> AddFoo.migrate(:up)

我尝试了其他答案,但要求没有Rails。根对我没用。

此外,.migrate(:up)部分强制迁移重新运行,无论它是否已经运行。这对于当你已经运行了一个迁移,但因为打乱了db而有点取消了它,并且想要一个快速的解决方案重新启动它的时候很有用。