2

从命令行,我可以运行

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')

版本是必需的

Rake.application.invoke_task("db:migrate:up[VERSION=20120123160700]"

版本是必需的

Rake.application.invoke_task("db:migrate:up[VERSION=20120123160700]"

不知道如何构建任务 'db:migrate:up VERSION=20111208105833'

我怎样才能使这项工作?

4

2 回答 2

4

这可能不是更好的解决方案,但它应该可以工作。你可以这样做 :

  ActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_path, 20120123160700)
  Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby

您可以在此处查看源代码:https ://github.com/rails/rails/blob/621df2a1ec01b77f7b052b3571f3c696f0443fea/activerecord/lib/active_record/railties/databases.rake第 163 行。

于 2012-07-23T15:32:41.620 回答
2

我相信你可以做到:

ENV["VERSION"] = "20120123160700"
Rake::Task["db:migrate:up"].invoke

或者,您可以执行以下操作:

system("rake db:migrate:up VERSION=20120123160700")

(我不清楚这是否适用于 Windows,因为它使用 Kernel#system)。

于 2012-07-23T15:25:12.257 回答