0

元の問題は、一部の移行ファイルが最初にマシン (実稼働など) で実行されたことです。その後、いくつかの移行が何らかの形で削除され、復元できませんでした。

そのため、アプリを使用して新しいマシンを稼働させるには、不足している移行を手動で再作成する必要がありました。

したがって、削除された移行を既に実行したマシンは、これらのエラーをスローしています。

PG::Error: ERROR: relation "some_relation" already exists

db:resetそのデータを失うことができないため、本番環境でデータベースだけを使用することはできません。

実行すると、rake db:test:prepare次のようなものが表示されます。

You have 4 pending migrations:
  20130112203055 CreateSomeTable
  20130113180203 AddSomeColumnToTable
  20130113204017 ChangeSomeOtherColumns
  20130311203729 CreateAnotherTable
Run `rake db:migrate` to update your database then try again.

明らかに、実行db:migrateすると上記のように PG::Error が返されます。問題は、削除された移行によってスキーマの変更が既に完了していることです。上記の「保留中」の移行は、事後に再作成する必要がありました。

これを修正してdb:migrate再び機能する方法はありますか?

4

1 に答える 1

1

以下を試してください。

rake db:migrate:down VERSION=20121031XXXXXXXX
rake db:migrate

20121031XXXXXXXX移行名の日付スタンプはどこにありますか。つまり、20120410214815_some_relation.rb(like) という名前の移行があり、ファイル名から日付スタンプをコピーしてコマンドに貼り付けます。参照用に移行に関する Rails ガイドを次に示します。

于 2013-03-19T16:13:11.650 に答える