3

突然奇妙なエラーに遭遇しました。実行しようとすると、次のrake specメッセージが表示されます。

You have 2 pending migrations:
  20130405105004 CreateReports
  20130405113839 AddDocumentToReports

その理由はわかりません(過去に移行を実行したので、データベースとschema.rbにデータがあります)。

ここにあるrake spec --trace

** Invoke spec (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
You have 2 pending migrations:
  20130405105004 CreateReports
  20130405113839 AddDocumentToReports
Run "rake db:migrate" to update your database then try again.

ここにあるrake db:migrate:status

   ...
   up     20121210112419  Create simple captcha data
   up     20130214110545  Add weeknum to alerts
  down    20130405105004  Create reports
  down    20130405113839  Add document to reports
   up     20121018133601  *** NO FILE ***
   up     20121018163051  *** NO FILE ***
   up     20121024124111  *** NO FILE ***

そしてここにあるrake db:migrate

==  CreateReports: migrating ==================================================
-- create_table(:reports)
rake aborted!
An error has occurred, all later migrations canceled:

Mysql2::Error: Table 'reports' already exists: CREATE TABLE `reports` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `user_id` int(11), `ready_status` tinyint(1) DEFAULT 0, `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB

Tasks: TOP => db:migrate

どうすれば修正できますか?

4

4 に答える 4

10

これが開発環境にあり、データベースに重要なデータがない場合は、実行します

bundle exec rake db:migrate:reset

これによりスキーマが再構築されますが、すべてのデータが破棄されます。

于 2013-04-09T14:07:36.483 に答える
0

Recksの回答とコードを使用してスキーマを再構築することで、すべてを機能させることができました

bundle exec rake db:migrate:reset
于 2014-08-17T00:02:41.350 に答える
-1

* No File *で同様の問題がありました。rake db:migrate:status を実行したところ、migrate フォルダーの下の別のフォルダーに保存した古い移行を rake が探していることがわかりました。そこで、古いマイグレーションと schema.rb を削除しました。次に、rake db:drop、rake db:create、rake db:migrate を実行しました。これで問題は解決しました。

于 2014-04-26T14:47:37.843 に答える