2011-11-08 14 views

答えて

1

理想的には、開発中にのみ移行を使用し、スキーマをロードして本番環境でデータベースをシードしたいと考えています。実際には、いくつかの変更を行ってから、何の害もなくプロダクションに展開することができます。

移行を使用すると、データベースでも作業を繰り返すことができます。あなたは何かを追加することを忘れることを心配する必要はありません。開始するときは、テーブルが正しいと思うように作成し、後で別の移行でテーブルを修正できます。それが基本的なアイディアです。それは1 dbスクリプトはそれらのすべての種類のものを取り除く。

少したとえば、ユーザー名とパスワードを使用してUserモデルを持っていて、電子メールのフィールドを追加する必要がある場合は、単にこの

を行う
rails generate migration AddEmailToUser # this is a convention, but you can name it however you want 

class AddEmailToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :email, :string 
    end 
end 

移行を適用するときchange方法は、両方の方法を動作しますまた、元に戻す必要がある場合もあります。これは、Rails 3.1の魔法のようなものです。

移行を追加したら、移行の古いバージョンこの

class AddEmailToUser < ActiveRecord::Migration 
    def up 
    add_column :users, :email, :string 
    end 

    def down 
    remove_column :users, :email 
    end 
end 

ようになり、ちょうどrake db:migrateを実行し、すべてがうまく動作するはずです。移行の大きな利点は、あなたが手動で台無しデータベースを場合、あなたは簡単にだけ

rake db:drop 
rake db:create 
rake db:migrate 

または

rake db:migrate:reset # this might not work if you messed up your migrations 

を行うことができますし、私は「

+0

を作成したデータベースの正しいバージョンを持っているということですそれをマスターするのに問題があります。どういうわけか私はそれを間違って使用しています。なぜなら、列を追加すると、テーブルにはすでにいくつかの列が存在することがわかります。マイグレーションの使い方を読んでどこかに案内してくれますか? – Roman

+0

@Am。レールガイドhttp://guides.rubyonrails.org/migrations.htmlを見てください。 –

0

移行は、データベーススキーマの変更を追跡します。そのすべての変更(列の名前の変更、表の変更、索引の追加など)は、移行を介して行う必要があります。複数のプロダクションサーバーに変更を展開するのは簡単です。

関連する問題