1

既存のデータベースを使用して新しい Rails プロジェクトを作成しようとしています。

プロジェクトを作成し、database.yml を構成して、db:schema:dump を正常に実行できます。

これはすべて、私がこのサイトで読んだことに基づいています

http://blog.joelberghoff.com/2013/02/06/ruby-on-rails-tutorial-creating-a-rails-instance-from-an-existing-mysql-db/

そして、他にもいくつか。

ダンプを行った後、schema.rb を db/migrate にコピーし、彼のチュートリアルで示されているように名前を 001_createdatabase.rb に変更しました。

すべて問題ないようです。ただし、保留中の移行があると表示されるため、サイトを実行できません。db:migrate:status は、私が作成した 001_createdatabase.rb を示しています。

それに基づいて:

  • schema.rb から 001_createdatabase 移行を作成することは正しいことでしたか?
  • それがすでに行われているように、それを実行する必要がないことをレールに理解させるにはどうすればよいですか?
  • Rails は、保留中の移行があるかどうかを確認する場所を確認します。明らかに、db/migrate フォルダーをチェックして、何と比較する必要がありますか?

ありがとう

4

1 に答える 1

4

移行を実行した功績を認めるには、実際に移行を実行する必要があるようです。移行は001_createdatabase.rb,、空のデータベース (テーブルもデータもありません) から、最初のバージョンのデータベースへの移行を表します。を実行するrake db:migrateと、Rails は schema_migrations テーブルで移行ファイル名の数値部分を検索して、db/migrate ディレクトリ内のすべてのファイルが実行されたかどうかを確認します。

あなたの場合、移行を実行していないため、schema_migrations テーブルにエントリがないため、Rails は当然のことながら、実行する移行があると考えています。

この問題を解決するには、移行が実行されたという記録を schema_migrations に入れるか、実際に移行を実行します。schema_migrations テーブルを作成する必要がある場合があります。レールは必要に応じて作成します。

移行を実行する場合は、データベースを削除 (または新しいデータベースを作成 -- これが機能する場合は古いデータベースを削除できます) し、Rails アプリケーションが新しいデータベースを参照するようにします。と実行rake db:createrake db:migrateます。完了すると、データベースの新しいコピーが作成されますが、これは Rails 移行プロセスによって作成されたものです。schema_migrations テーブルには、バージョン列が 1 のレコードが必要です。

于 2013-11-06T16:53:57.870 に答える