2

同様の質問がたくさんあります。しかし、私の状況は少し違うと思います。私は、私のローカルマシン(PostgreSQLを使用)にHeroku(私はprodでsqlite3を使用)からdbを引き出しました。 prod dbにはその時点でデータがありませんでした。Railsを使用して開発からテストへデータベースを移行する際に助けが必要

その後、私はテストのためにdbの移行を行っていません。今私はdevのdbにいくつかのフィールドがあります。しかし、私は自分の持っているものを見るためにコンソールをテストすると(Userテーブルを参照すると)User.countは0を返しますが、devには2人のユーザを返します。

レイクをdb:migrate RAILS_ENV=testとしましたが、エラーメッセージも成功メッセージもありませんでした。私はそれが成功したと思って、それらの2人のユーザーがまだ何もない場合、テストdbをチェックしました。それから私はbundle exec rake db:test:prepareを試しました。

20120415210441 CreateUsers

20120418064930 AddIndexToUsersEmailデータベースを更新する

20120419034627 AddPasswordDigestToUsers

20120504031144 AddRememberTokenToUsers

実行rake db:migrate:これはあなたが4つの保留中のマイグレーションを持っ出力

**でした再度試してください。**

解決策は何ですか。

EDIT: FYI:私は使用しています窓 私はまた、すくいデシベルを実行します。を移行し、私はこのエラーを得ました。

$すくいデシベル: == CreateUsersを移行:移行=================================== ================= - create_table(:users) レーキが中止されました! エラーが発生した、これとキャンセルすべて以降の移行:

するSQLite3 ::のSQLException:表 "ユーザー" は既に存在し:CREATE TABLE "をユーザー"( "ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULLと、 "名前" VARCHAR日時 "updated_atの" NOT NULLの日時 "のcreated_at"(255)、 "電子メール" varcha (255)、NOT NULL)

タスク:TOP => DB: を(とタスクを実行することにより、完全なトレースを参照してください移行 - トレース)

答えて

5

エラーメッセージは、開発者とテストの移行が同期していないことを示しています。

最初に実行するmigrate on dev。これはあなたの最近のすべての移行でdevを更新します。

rake db:migrate 

次に、db:test:prepareを実行します。これにより、テストデータベースはdevと同じスキーマになります。今

rake db:test:prepare. 

は、そのデシベルを理解する:テスト:テストを行う準備DEVとしてではなく、レコードのない同じスキーマを持っています。テストでレコードを取り込むには、フィクスチャまたは工場を実装します(工場のガールジェムを参照)。ファクトリーは、通常、テストでレコードを作成するためにテストで呼び出されます。

+0

は、ご返信いただきありがとうございます。私が "rake db:migrate"を実行すると、以下のようになります。(きちんとした形式で見たいと思ったら質問を更新しました) $ rake db:migrate == CreateUsers:migrating ======== ============================= - create_table(:ユーザー) レーキが中止! エラーが発生しました。これ以降の移行はすべてキャンセルされました。 SQLite3 :: SQLException:テーブル "users"が既に存在しています:CREATE TABLE "users"( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL、name "varchar )、 "email" varcha (255)、 "created_at" datetime NOT NULL、 "updated_at" datetime NOT NULL) – WowBow

+0

私はFactory-girlの宝石を使用しています – WowBow

+0

私は一つのことを尋ねることを忘れました。どのようにあなたのdevからテストに値(各テーブルに関連付けられているすべての行)をコピーしますか?私はrake db:migrate:prepareはそれをしないと思う。右? – WowBow

1

これは別の質問と別の回答です。

テーブルを削除して移行を再実行する必要があります。

あなたはSQLiteの中にテーブルを削除する方法がわからない場合は、

  1. 20120415210441_CreateUsers.rbでCREATE_TABLEメソッドコールアウトのコメント。
  2. 実行> rake db:migrate VERSION = 20120415210441
  3. 実行> rake db:migrate VERSION = ???どこ? CreateUsersより前の移行のバージョンです。
  4. のコメントを外し20120415210441_CreateUsers.rb
  5. のコード
  6. ファイル名を指定して実行>すくいデシベル:移行
+0

ありがとうございます。 – WowBow

関連する問題