从命令行,我可以运行
rake db:migrate:up VERSION=20120123160700
这将迁移到该特定版本。
我希望能够从rake任务向上迁移(但不能超出特定版本),最好使用db:migrate:up。
我已尝试以下操作并将错误消息放在下面:
Rake::Task['db:migrate:up VERSION=20120123160700'].invoke
不知道如何构建任务'db:migrate:up VERSION = 20111208105833'
Rake::Task['db:migrate:up'].invoke('VERSION=20120123160700')
需要VERSION
Rake.application.invoke_task("db:migrate:up[VERSION=20120123160700]"
需要VERSION
Rake.application.invoke_task("db:migrate:up[VERSION=20120123160700]"
不知道如何构建任务'db:migrate:up VERSION = 20111208105833'
我该如何做到这一点?
答案 0 :(得分:3)
这可能不是更好的解决方案,但应该有效。你可以这样做:
ActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_path, 20120123160700)
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
您可以在此处查看来源:第163行https://github.com/rails/rails/blob/621df2a1ec01b77f7b052b3571f3c696f0443fea/activerecord/lib/active_record/railties/databases.rake。
答案 1 :(得分:2)
我相信你可以做到:
ENV["VERSION"] = "20120123160700"
Rake::Task["db:migrate:up"].invoke
或者,您可以这样做:
system("rake db:migrate:up VERSION=20120123160700")
(我不清楚它是否适用于Windows,因为它使用Kernel#system)。