15

私のモデルを変更すると、Play Frameworkは私のスキーマ全体を削除して再作成するスクリプトを実行するように求めているようです。明らかに、これは生産のためには機能しません。したがって、これを本番環境で処理する適切な方法は何ですか?プロダクションでのPlay Framework 2データベースの進化の扱い

注:私はebeanとPostgresを使用しており、herokuでホストしています。残念ながら

答えて

29

Ebeanしたがって、あなたはできるだけ早くmanual evolutionsに切り替える必要がある、唯一のCREATE DDL(とないUPDATE DDL)(answered on their groupなど)を作成することができます。変更を実装する前に

  1. 必ずバックアップライブDB :)
  2. ebeanプラグインは、それはそれで作成されただけ1.sql進化
  3. を持っている場合は、最初の2を削除する必要が全体のDDLを再作成します:

    いくつかのルールは、 1.sqlからのコメントと、次の番号2.sql,3.sqlなどで独自の進化を書き始めます。手動進化に切り替える前に、できるだけ多くのモデル/フィールドを配置してください。最大の部分は、プラグインによって自動的に行われます。

  4. 手動展開では、DROP/CREATEの代わりに既存のテーブル/列にALTERSを含める必要があります。変更するたびにUpsDownsの両方が必要です。
  5. 可能な限り進化に多くの変更を加えようとすると、小さな変更ごとに個別の進化を管理して管理する方が簡単です。

事実、DB guiを使用してDB構造を変更する方が簡単ですが、主に単一の開発者向けに動作します...他の開発者とコードを共有する必要がある場合は、

新しいモデルの次の大きな部分を追加すると、一時的な自動DDLを再び有効にし、新しい部品をコピーするためだけにローカルgitを使用できます。その後、Ebeanプラグインによって生成された新しい部品を貼り付け、独自の革命に戻します。

12

Biesiorは基本的にそれをかなりうまくまとめました。しかし、Playの初心者としては、具体的な例を使ってもう少し明確にすることが役に立ちます。

まず、次の例はJava用です。

はあなたのモデルダムに新しいフィールド

public String dum_str; 

を追加したとします。その後、あなたはこのようなconf/evolutions/2.sqlが必要になります。

# --- !Ups 
ALTER TABLE dum ADD COLUMN dum_str VARCHAR(255); 

# --- !Downs 
ALTER TABLE dum DROP dum_str; 

私は、これは参考になる願っています。

+1

それ以外の読者にとっては、いいえ、それはALTER TABLE dum DROP COLUMN dum_strです。 (COLUMNに注意してください)。 – Simon

-3

スクリプトとしてのバックアップは、現在のdb。 Javaモデルを変更します。 Playで変更を適用し、DBを再作成します 次にデータを復元します。

事務局担当:それ以外の場合は動作しません既存のフィールド名を変更しないでください。

関連する問題