私は 2 つのマシンを持っています... 開発マシンと生産マシンです。Rails アプリを本番サーバーに初めて導入したときは、何の問題もありませんでした。rake db:schema:load RAILS_ENV=production を実行して schema.rb をインポートしました。すべてが順調でした。
そこで、開発マシンでさらにいくつかの変更と別の移行を行い、新しいアプリケーションを運用マシンにコピーしました。次に、rake db:migrate RAILS_ENV=production を実行してデータベースを更新しようとしました。次のエラーが表示されます:「データベースには、'schema_migrations' という名前のオブジェクトが既に存在します。」
私は自分自身に考えています、冗談じゃないレーキ... あなたがそれを作成しました! rake で trace を実行しましたが、rake が実行されたのはこれが初めてだと思われるようです。しかし、開発マシンと本番マシンの「schema_migrations」テーブルを分析すると、1 つの移行、つまり移行したい移行に違いがあることがわかります。
また、バージョン番号を明示的に定義しようとしましたが、それも機能しません。
本番サーバーを最新の状態にする方法について何かアイデアはありますか?
アップデート:
データベースを単に「ドロップ」することはできないということから始めましょう。これは、すでに 100,000 を少し超えるレコードがある運用サーバーです。今後、同様の問題が発生した場合はどうなりますか? データベースに問題が発生するたびにテーブルを削除する必要がありますか? 今回はうまくいくかもしれませんが、すべてのデータベースの問題に対する実際的な長期的な解決策とは思えません。私が今抱えている問題は、私だけのものではないと思います。
「schema_info」テーブルと「schema_migrations」テーブルは同じようです。私のセットアップでは、「schema_migrations」しかありません。前述のとおり、本番サーバーと開発マシンの「schema_migrations」テーブルの違いは 1 つのレコードだけです。つまり、移行したい変更のバージョン番号を含むレコードです。
私が読んだ本「Simply Rails 2」には、最初に本番サーバーに移動するときは、rake db:migrate を実行する代わりに、rake:db:schema:load を実行するだけでよいと書かれています。
問題があれば、Rails バージョン 2.1 を使用しています。