2012-03-14 15 views
9

私はレールを学んでおり、私はマイグレーションを見つけました。モデルを編集するたびに、まだ私が生産中ではないにしても、移行スクリプトを追加する必要があるようです。Rails - モデルからマイグレーションスクリプトを生成

モデルを編集し、必要な属性をすべて追加してからリリースする前に、移行スクリプトを自動生成できますか?

ありがとうございます!

+1

手動で移行スクリプトを作成するのは難しくありません。 –

+0

本当ですが、私が(開発中にはたくさんの変更があります)すべての変更に対して、かなりの数のAddXToY移行スクリプトが必要です... – Karan

+2

元の移行スクリプトを編集してデータベースを削除して再読み込みできると思います。 – Karan

答えて

3

これまでのコメントに同意します。移行のアイデアは、新しいフィールドを追加したいときにアプリケーションに合わせてデータスキーマを流暢に適応させることです。シンプルで美しいシステムです。

多くの一般的なケースで適切なコードが生成されるだけでなく、さまざまなバージョンのデータベースで実行された移行を追跡するため、rails generate migration...を使用できます(また使用する必要があります)。 、FIRST_NAME、LAST_NAMEなどの分野で、例えばユーザーのために、新しいモデルを作成

  • 、USER_NAME
  • この関連した移行を作成していることができます:http://guides.rubyonrails.org/migrations.html#creating-a-migration

    一般的なワークフローは、このようなものかもしれませんが、参照してください。 bundle exec rake db:migrateを使用して実行 - データベーススキーマが更新されます

  • 生年月日のような追加情報が必要な場合は、rails generate migration AddBirthdateToUser birthdate:dateを実行してください。列、インデックスなどの追加などの簡単な操作では、完全な移行コードが生成されます。他の場合は、移行を記述する必要があります。完了したら、移行を実行します。
  • 開発で問題が見つかった場合、たとえば、フィールドの種類が整数ではなく浮動小数点数になるか、インデックスを追加するのを忘れた場合は、移行をロールバックして(bundle exec rake db:rollback)、移行を修正してから再実行します。
  • (移行を実行する)テストを実行し、すべてがローカルで動作する場合は、ファイル(移行を含む)をチェックインし、データベースの独自のコピーを持つQAまたはステージングサーバーに展開します。
  • 実行rake db:migrateステージングサーバー上。あなたがチームにいて、他の開発者が移行をチェックインしている場合は、移行も実行されます。コードとデータスキーマが同期しました。

:-)繰り返し生産展開時に移行を実行する一切害は(私は丁重に上記のコメントに反対する)ありません - あなたのアイデアその変更、することができ、このようにも変更を(受け入れる必要があります他の環境では信じられないほど難しい)は日々のRailsの生活の中では普通のことです!

4

レール3+を使用している場合は、ActiveRecordではなくDataMapperを検討してください。これにより、複数の移行ファイルではなく、モデルでデータモデルを定義できます。私が理解しているように、DataMapperを使用すると、変更から移行を生成できます。

これは、より広範なORMコミュニティでよく使用される、試して信頼できるパターンです。

関連する問題