質問

rake db:migrateは新しい移行のみを追加しますか、それともすべての移行/変更を削除して新しいものをすべて構築しますか?

移行042で削除された移行040のテーブル属性にアクセスしようとしているため、rakeがエラーをスローしていると思います。

専門家向け-rakeが移行と同期しなくなることはよくありますか?どうすればこれを回避できますか(いいえ、スキーマやレーキファイルを手動で編集しません)。

役に立ちましたか?

解決

スクリプト(スクリプト/モデルの生成など)を使用して移行を作成するたびに、実際のデータベースと同期する準備ができた正しいディレクトリに新しい移行が追加されます。

実際には、rake db:migrateは、以前の移行を気にせずに、どの欠落した移行をデータベースに適用する必要があるかをチェックするだけです。

もちろん、他の方法を使用してデータベースを変更する場合、同期されていないものを取得するのが一般的です。先ほど言ったように、下にあるものに移行を適用していることがわかります。

他のヒント

Rails移行を使用すると、 schema_migrations というテーブルが自動的に作成され、各移行のバージョン番号(これは、ファイル名に移行名、つまりdb / migrate / _20090617111204__migration.rb)。 rake db:migrate を実行して上に移行すると、以前に実行されていない(つまり、バージョンがテーブルに含まれていない)移行のみが実行されます(このため、 db:migrate を実行しているときは、既に実行された効果はありません。下に移行すると、 schema_migrations で見つかった、ロールバック先のバージョンより大きいすべてのバージョンが取り消されます。

移行とは、現在のバージョンから新しいバージョンに移動することです(最初の回答で述べたように)。 rake db:migrateを使用すると、新しい変更をスキーマに適用できます。ただし、以前の移行にロールバックしたい場合は、rake db:rollbackを使用して、誤って定義された新しい変更を無効にすることができます。注意:そうすることでデータが失われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top