1

最近、いくつかのコードをプルして rspec を実行しました。テストは問題なく合格しました。しかし、「rake db:migrate」と「rake db:prepare」を実行すると、問題が発生しました。

現在、rspec テストはパスせず、すべての失敗は同じエラーを示しています。

Mysql2::Error: Table 'app_test.admins' doesn't exist: SHOW FULL FIELDS FROM `admins`

問題は、データベース名がコードのどこにも指定されていないことです。database.yml では、「.admins」サフィックスなしで「app_test」が指定されています。

同様に、Rails サーバーを実行すると、次のエラーが表示されます。

Mysql2::Error: Table 'app_dev.admins' doesn't exist: SHOW FULL FIELDS FROM `admins`

yml に「app_dev」のみが指定されています。

rake コマンド (db:migrate、db:test:prepare、db:create、db:drop など) はすべて、database.yml で指定されたデータベースを変更しています。Rails が '.admins' サフィックスの付いたデータベースを探しているだけです。 . この「.admins」サフィックスはどこから来て、どうすれば削除できますか?

4

4 に答える 4

2

問題は次のとおりでした。

コードをプルすると、何らかの理由で「管理者」テーブルが から消えましたdb/schema.rb。このテーブルは、rake:db:migrate を介して復元することはできません。これを作成した移行ではt.database_authenticatable、廃止され、Devise gem では動作しなくなった が使用されているためです。レガシ コードを基に構築しているためrake db:migrate、最近変更された移行でのみ実行し、空のデータベースから実行することはありません (空のデータベースの場合は を使用しますrake db:schema:load)。

テーブルが欠落しdb/schema.rbていたので、 を使用しても復元されませんでしrake db:schema:loadた。この問題を解決するには、 を使用git resetして古いバージョンのdb/schema.rb.

すべての移行を実行できるように Devise の非推奨の問題を修正するには、https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema- にアクセスしてください。スタイル

于 2013-07-31T17:53:00.003 に答える
0

rake db:prepare は有効なコマンドですか? rake db:create:all を試しましたか?

于 2013-07-30T22:20:15.040 に答える