2013-05-26 5 views
20

こんにちは、私は現在レールを学んでおり、チュートリアルに従っています。私がアプリケーションを作成した後、rake db:migrateを実行し、次にrake db:createを実行した後に、移行ファイルを編集するという指示がありました。rails db:create/migrate

私はこれに移行ファイルを編集した:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :username 
     t.string :email 
     t.string :encrypted_password 
     t.string :salt 
     t.timestamps 
    end 
    end 
end 

その後、i 'はすくいデシベルを:移行' を実行してきたとき、私はになってるの後、私はエラー

Mysql2::Error: Table 'users' already exists: CREATE TABLE `users` ... 

を得ました実行「すくいデシベル:作成」をあなたは一度だけrake db:createを実行して、あなたはモミそれを実行し、この

user_auth_development already exists 
user_auth_test already exists 
+0

iはデシベルを実行する必要がありますか、移行のために必要とされるすべてのrakeタスクをしますか?または私は一度マイグレーションファイルを編集するこのalreayセットアップですか? –

+0

テーブルがすでに存在していることを示します。前回の移行で既に作成されている可能性があります。感謝! –

答えて

43

を取得イム、 t。次に、マイグレーションを追加/変更するたびにrake db:migrateを実行します。既にこの移行を実行しているか、すでに存在し、すでにusersという名前のテーブルが含まれているデータベースを指しています。私の推測では、すでに移行を実行したことがあります。この場合、移行するのがよいでしょう。あなたがデータベースを核にしてやり直したいのであれば、rake db:drop db:create db:migrateを実行してください。作成し、DB::移行

+0

ありがとう!これはそれを解決しました。 –

+0

ありがとう!なぜ彼らはガイドでこれをカバーしていないのかわかりません。また、移行を正しく更新する方法についても説明していません。移行ファイルを更新して 'rake db:migrate'を実行しても何も起こりません。私は何か間違っていることを知っているが、私は何をすべきか分からない。マイグレーションに新しい名前を付ける必要がありますか? – Nathan

+0

一般に、移行ファイルは変更しないでください。あなたがしていることを本当に知っていれば、いつ受け入れられるのか分かります。疑問がある場合は変更しないでください。代わりに、新しい移行ファイルを作成します( 'rails generate migration')。これにはほんのわずかな例外があります。直近の移行を変更したい場合は、それを実行してから最後の移行を削除して再実行する 'rake db:migrate:redo'を実行します。これは必ずしも可能ではありません。それは最後の移行が可逆的であるかどうかによって異なります(すべてではありません)。共有リポジトリにすでにコミットしている場合は、これを実行しないでください。 –

15
我々は単に与えることができ

は、それがデータベースの作成と

rake db:setup

+0

これは私にとってはうまくいきません...スキーマファイルはまだ存在しないと言います... –

+0

シンプルな情報をかなり探しています...簡単に見つけるのは簡単すぎました。モデルからデータベースを生成します。 – nembleton

関連する問題