私はあなたが壊れにくくなるために、問題の移行を修正する必要があり、私はif
文、おそらくrescue
のカップルは十分だろうと推測すると思います。
しかし、実際に移行を修正することはオプションではない場合は、さまざまな方法で偽装することができます。まず、移行方法をコメントアウトしてrake db:migrate
を実行して問題のある移行のコメントを外す(または元に戻す)ことができます。
また、データベース内で偽装することもできますが、あなたが何をしているのか分からない限り、手動でパッチを当てても間違いがない限り、この種の攻撃はお勧めしません。データベースにschema_migrations
というテーブルがあり、varchar(255)
という単一の列がversion
となっています。この表はdb:migrate
によってどの移行が適用されたかを追跡するために使用されます。あなたがする必要があるのは、適切なversion
の値を挿入することと、rake db:migrate
は、移行が完了したと考えるでしょう。あなたのデータベースに行くと言って、その後
db/migrate/99999999999999_XXXX.rb
:
99999999999999
は、当然のことながら、移行のファイル名の数であり
insert into schema_migrations (version) values ('99999999999999');
を問題の移行ファイルを検索します。その後、rake db:migrate
を実行すると、その移行はスキップされます。
3番目の前に2番目のオプションを使用していますが、完全性のために「ハックschema_versions
」オプションを含めるだけです。
雅、私は先に行って、一時的に問題の移行を切り出します。私は個人的には適切なIf文を作成していたか、それとも実動環境をチェックしていたのでしょうか?明らかに、マイグレーションを処理する人はdbを使用することを信じていません:Pの開発中にマイグレーションしてくださいThanks – hmind
@hmind:マイグレーションはdb:migrateを開発中に使用することを信じていません。 "ああ、私。あなたのプロダクションシステムへの公開は、楽しい楽しい時間でなければなりません! –
幸運にも、私はそれを扱っていませんどちらかというとhaha – hmind