你应该可以使用
rake db:migrate:up
强制它继续前进,但你可能会错过团队中其他人的交错迁移
如果你运行
rake db:migrate
两次,它将重新应用您的所有迁移。
我在使用 SQLite 的 Windows 上遇到了相同的行为,这可能是特定于这种环境的错误。
编辑 -- 我找到了原因。在 railstie database.rake 任务中,您有以下代码:
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
task :migrate => :environment do
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end
然后在我的环境变量中我有
echo %Version% #=> V3.5.0f
在红宝石中
ENV["VERSION"] # => V3.5.0f
ENV["VERSION"].to_i #=>0 not nil !
因此 rake 任务调用
ActiveRecord::Migrator.migrate("db/migrate/", 0)
在 ActiveRecord::Migrator 中我们有:
class Migrator#:nodoc:
class << self
def migrate(migrations_path, target_version = nil)
case
when target_version.nil? then up(migrations_path, target_version)
when current_version > target_version then down(migrations_path, target_version)
else up(migrations_path, target_version)
end
end
是的,rake db:migrate VERSION=0 是rake db:migrate:down 的加长版
编辑 - 我会去更新灯塔错误,但我的超级公司代理禁止我在那里连接
与此同时,您可以在调用 migrate 之前尝试取消设置 Version ...