2011-07-10 6 views
0

dbマイグレーションの概念は私には新しですが、同時に非常に素晴らしいです。 :)Rails:リファクタリング・マイグレーション

マイグレーションによってテーブルの列を適切に追加/削除/変更する方法を知っておく必要があるという点で、マイグレーションの適切な使用について不思議です。過去には、私はいつもgui経由でデータベースを直接編集してきました。 :/

新しい列を追加するにはどうすればよいですか?私はrails g migration :new_col => :attributesを使って試しましたが、これは多くの列を作成/削除することになるなら、これは面倒なことに思えます。

私の最大の恐怖は今はライブデータベースでこれを行う方法を学んでいる - 私がおよぶライブデータベースを編集して回ることはできませんが、私は新しいUSER_PROFILEフィールドとその他もろもろを言う、追加できるようにする必要があります。

私はこのことについて最初に具体的には最善の方法を聞くことに興味があります。次に、これを行う際の推奨事項と過去の経験。

おかげで、SOコミュニティは基本的に私に準教育を与えました。

答えて

1

複数のデータベース変更を適用する場合は、それらを移行ファイル内のそれぞれの行で複数のコマンドに分けることができます。演算に計算が必要な場合は、他のRubyクラスで作業していた場合と同じように、Rubyコードをこれらのメソッドに埋め込むこともできます。データベース特定の操作を行うためのActiveRecordの外にまた、SQLを実行することができ、またはあまりにも複雑で操作がORMを効果的に管理するために:移行の方法についての

詳しい情報はここで見つけることができます: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

を行うためとしてライブ環境では、まずライブ環境のミラーであるステージング環境での移行をテストします。ステージングが成功したら、本番環境での移行を実行する前にライブデータベースをバックアップします。

警告が表示され、移行が途中で失敗した場合、半分の適用状態になってしまうことがあります。この場合、rake db:migrate:downも失敗します。これらの操作では、解決するためにDDL構文(またはこのDDLを生成するGUIプログラム)を理解する必要があります。そのため、生産に移行を適用する前に、適切なステージングドライランが重要となります。

+0

トランザクションは、データベース固有の処理にあまりにも頼っているため、適切な配備方法の代わりに使用しないでください。すべてのDDL操作がトランザクション内で実行できるわけではないように見えます(http://stackoverflow.com/questions/1108749/limits-on-postgresql-schema-changes-inside-transactions)。しかし、役に立つヒント。私はすべてのマイグレーションをトランザクションブロック内にラップすることにします! –

関連する問題