2

コマンドラインから実行できます

rake db:migrate:up VERSION=20120123160700

これにより、その特定のバージョンに移行されます。

できれば db:migrate:up を使用して、rake タスクから (ただし、特定のバージョンを超えては) 移行できないようにしたいと考えています。

次のことを試し、エラーメッセージを以下に示します。

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

(ただし、Kernel#system を使用しているため、Windows で動作するかどうかは不明です)。

于 2012-07-23T15:25:12.257 に答える