アプリのDBとしてmysqlを使用しています。新しいテーブルを追加したい場合は、移行を使用するか、レールが移行を生成すると言います name:string age:integer
または、mysql で新しいテーブルを作成するだけです。両者に違いはありますか?
アプリのDBとしてmysqlを使用しています。新しいテーブルを追加したい場合は、移行を使用するか、レールが移行を生成すると言います name:string age:integer
または、mysql で新しいテーブルを作成するだけです。両者に違いはありますか?
はい、大きな違いがあります。正当な理由 (Rails アプリに直接影響しないなど) がない限り、データベースにテーブルを直接作成しないでください。
mySQL でテーブルを作成した場合、一致するモデルを作成するとそれにアクセスできますが、データベースをデプロイするときに、実稼働データベースにも同じ変更を加える必要があります。これは、忘れがちな追加の展開手順があることを意味します。これは、プロジェクトで複数の人が作業している場合、または複数のマシンからプロジェクトを使用している場合にも当てはまります。
テーブルを直接作成する場合のもう 1 つの問題は、データベースがバージョン管理されていないことです。移行を使用すると、データベースのバージョンを自由に切り替えることができます。移行中にアプリケーションが壊れましたか? を使用して以前のバージョンに簡単にロールバックするrake db:rollback
3 つ目の意味は、db/schema.rb
ファイルがデータベースを反映していないということです。これにより、後でスキームをダンプするのを防ぐことができます。たとえば、mySQL から Postgres に切り替えたい場合、移行を使用しないと非常に難しいことがわかります。
移行によってテーブルを作成するschema.rb
と、新しいテーブルの追加を反映するようにファイルが更新されます。
rake db:migrate
データベースを移植するのではなく、単に rake タスクを実行し、開発、テスト、および実稼働環境ですべてのテーブルを作成できるため、移行は推奨されるルートです。
マイグレーションの詳細については、こちらの公式ドキュメントを参照してください - http://guides.rubyonrails.org/migrations.html