web-dev-qa-db-ja.com

Rails 4保留中の移行を無視する方法

問題は次のとおりです。

  • 初期データでいっぱいのdb/seed.rbがあります。
  • 移行の1つは、このシードが提供するデータに依存します。
  • 空のデータベースからアプリをデプロイしようとしています。

結果は次のとおりです。

  • Rails_ENV = production rake db:migrate-初期データがないために失敗する
  • Rails_ENV = production rake db:seed-保留中の移行が原因で失敗する

保留中の移行を無視するようにrakeに何らかの形で伝えたかったのですが、今のところはできません。

PDATE(追加の経験による)

移行とモデルコードの同期がとれず、移行が実行されない場合があります。この問題を回避するために、最近移行でモデルの再定義を使用しました:

# reset all callbacks, hooks, etc for this model
class MyAwesomeModel < ActiveRecord::Base
end

class DoSomethingCool < ActiveRecord::Migration
  def change
    ...
  end
end
47
Waterlink

Railsはschema_migrationsというテーブルに移行情報を保存します。

特定の移行をスキップするには、移行のバージョンをそのテーブルに追加できます。

バージョンは、ファイル名の説明の前にある数字の文字列です。

[version]_Create_Awesome.rb
12
Dan Grahn

これがあなたに役立つかどうかはよくわかりません。しかし、私は何かを探していて、この質問を見つけました。したがって、これは役立つかもしれません:

Rails_ROOT/config/environments/development.rbで、次の設定をfalseに設定します。

 config.active_record.migration_error = false#:page_load

私の状況では、保留中の移行エラーは表示されなくなりました。同じ環境のrakeタスクとコンソールでも動作するはずです。

130
whizcreed

次のデータに応じて移行の名前を変更します。

20140730091353_migration_name.rb

.20140730091353_migration_name.rb

(ファイル名の先頭にドットを追加します)

次にrake db:seedを実行し(保留中の移行について文句を言わなくなります)、移行の名前を変更します。

その後に移行が続く場合は、すべての名前を変更するか、単に一時的に移動する必要があります。

26
mirelon

同様の問題がありました。 add_column行をコメント化して、rake db:migrateコマンドを実行し、テスト環境または実稼働環境で必要になったときにコメントを削除しました。

2
siva

Railsコードにパッチを適用しない限り、方法はありません。代わりに移行を修正することを強くお勧めします。

移行は、データベース内の一部のデータの存在に依存すべきではありません。以前の移行に依存する場合がありますが、もちろんデータベース上のデータには絶対に依存しません。

2
Simone Carletti