3

そのため、開発プロセスのある時点で、users テーブルに列を追加するための移行を追加しました。この列には「ドル」属性が追加されました。その後、remove migration を記述して "dollars" 属性を削除することにしました。後で誤って最初の移行を削除してドルを追加したため、ローカルの SQLite データベースで db:migrate を実行したときに発生したエラーを解決するために、RemoveDollarsFromUsers移行も削除しました。

私がherokuにデプロイするまで、問題は解決していたようです。でデータベースをリセットした後、実行するとheroku pg:reset DATABASEheroku run rake db:migrate「ドル」はユーザーの属性ではないというエラーが表示されました。ログ ファイルは、以前に削除した RemoveDollarsFromUsers 移行を実行しようとしたことを示していました。

そのため、レポが最新であることを再確認し、heroku が古い移行を覚えているのではないかと考えて、heroku で完全にリセットして新しいアプリを起動しようとしました。プッシュしているレポには古い移行ファイルへの参照がまったくないはずですが、新しいherokuアプリでは同じエラーが発生しました。

これはgitの問題ですか?私が考えることができる唯一のことは、gitがRemoveDollarsFromUsers移行で古いバージョンをプッシュしていることです。そうでなければ、herokuはどうすればそれについて知ることができますか?

4

1 に答える 1

3

db:migrateそのため、移行はスキーマ移行テーブルに記録され、rakeを実行するときにどの時点から実行するかを指定しdb:resetますdb:setup

あなたが言うように、特に移行をチェーンの下に変更する場合は、混同されることがあります。全体を再度実行する簡単な方法の 1 つは、shchema_migrations テーブルを削除することです (ただし、運用環境にあり、保持したいデータがある場合、これは危険な場合があります)。実行db:migrateすると、それらすべてが段階的に実行されます。

ベースに戻る最も簡単な方法は、新しい移行を作成してコピーするdb/schema.rbことです (希望するものを反映するようにします)。その後、他の移行を削除し、データベースを削除してから、新しい移行を実行できます。

ただし、最初に失いたくないものは必ずバックアップしてください。

于 2013-04-12T04:18:35.763 に答える