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


当前回答

请注意,您可能不得不在新的rails环境中使用rails runner而不是script/runner。

其他回答

这是再次运行迁移文件“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

假设你可以运行最新版本的Rails:

rake db:migrate:up VERSION=20090408054532

其中version是迁移文件名中的时间戳。

编辑:在过去8年的某个时候(我不确定是哪个版本),Rails添加了检查,如果它已经运行,则阻止它运行。schema_migrations表中的一个条目表明了这一点。要重新运行它,只需执行rake db:migrate:redo VERSION=20090408054532即可。

你可以直接从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

如果你在路径上有问题,你可以使用

require Rails.root + 'db/migrate/20090408054532_add_foos.rb'

请注意,您可能不得不在新的rails环境中使用rails runner而不是script/runner。