15

play 2.1.1 を使用して新しいアプリケーションを本番環境にデプロイする過程にあり、いくつかの実際の問題があり、非常に限られたドキュメントはあまり役に立ちませんでした...

そのため、新しいバージョンに更新する時が来ました。通常の停止/アップグレード/開始スクリプトを実行しましたが、失敗しました。何らかの理由で、プレイは進化の適用を拒否していました。始めたとき、それは言い続けました

サーバーを起動できません。@ 6elnj89fh: データベースの「デフォルト」には進化が必要です!

applyEvolutions.default=trueこれは、コマンド ラインと application_prod.conf ファイルの両方で設定しようとしたにもかかわらずです。また、それは不平を言った

警告!このスクリプトには、破壊的な可能性のある DOWNS の進化が含まれています

バージョンが上がっているので、ダウンは適用されるべきではないので、これはあまり意味がありません。しかし、これが進化の適用を拒否した理由だったようです.

この時点では、進化を手動で適用する方法があると思っていたので、それほど心配していませんでした。広範な検索の後、次のように見えます...プレイ1ではこれがサポートされていましたが、プレイ2ではサポートされていませんでした。開発モードでは、ブラウザのボタンを押すだけで進化を適用できますが、製品モードではNO WAY OFを見つけることができました進化を手動で適用する。これは本当ですか、それとも私はそれを見逃しましたか? これは本当に重要な機能だと思います!(後から考えると、スクリプトを手動で適用して進化プラグインを無効にすることもできましたが、そうすると便利な進化追跡が失われていたでしょう..)

また、ある時点でそれを行う必要がある時点に到達すると確信しているため、データベースを「バックアップ」する方法についても疑問に思います。これを手動で行う方法があれば、データベースをダウングレードするためのオプションのバージョン引数がおそらくあるでしょう。たとえば、バージョン 5 を使用していて 4 に戻す必要がある場合は、実行play apply-evolutions 4してバージョン 5 からのダウンを適用し、それに応じて進化データベースを更新します。ダウンを手動で適用することもできますが、問題は、進化データベースが再び無効な状態になることです...

さらに必死になって、サーバーを再起動するために見つけたすべての設定を試し、-DapplyDownEvolutions.default=trueオプションを追加しました。この設定は、DB をダウングレードすることを選択した場合にのみダウンを適用すると想定していましたが (そのようなオプションはないようです)、実際には、アップを適用してからすぐにダウンを適用することでした (後でトラブルシューティングでこれを見つけました)。サーバーは最終的に起動しました-メッセージはまったくありません-しかし、サイトにアクセスすると不可解なエラーメッセージが表示されました)。それがこの設定の目的ですか?もしそうなら、なぜその設定が存在するのか理解できません。新しいデータベース バージョンに移行するときに、アップを適用してからすぐにダウンを適用するシナリオは考えられません。誰かがこの設定に光を当てることができますか?

この時点で、適切な「UP」を手動で再実行することで、アプリをもう一度実行することができました。

この時点で、実行される内容をより適切に制御し、元に戻すことができるようにするために、独自に進化を処理するためのスクリプトを基本的に書き直すことに取り組んでいます。誰かがこれに光を当てることができることを願っています。そうでない場合は、この暴言が同じような状況にある人を助けることができるかもしれません...

4

1 に答える 1

17

編集:Play 2.5用に更新


約 3 年以上前から Play のエボリューションをプロダクションに使用しており、重大な問題は一度もありませんでした。

最初にテスト データベースに対して進化を実行するステージング環境を用意することをお勧めします。テスト データベースには、本番データベースとまったく同じバージョンが必要です。あなたは自分の進化で間違いを犯すでしょう。これは、実稼働サーバーに移動する前にそれらを見つける方法です.

推奨設定

本番システムでは、次の設定が有効になっています。

play.evolutions.db.default.autoApply=true

この設定autoApplyにより、ユーザーの操作なしで進化が自動的に適用されるようになります。明らかに、これは本番データベースをアップグレードするときに必要なことです。

ステージング/テストシステムでは、両方の設定が有効になっています。

play.evolutions.db.default.autoApply=true
play.evolutions.db.default.autoApplyDowns=true

2 番目の設定applyDownEvolutionsでは、DOWNS の進化も自動的に適用されます。データの損失につながる可能性があるため、実稼働システムではこれを望んでいません (DOWNS の進化には DROP TABLE などのものが含まれることが多いため)。

ただし、テスト システムでは、アプリケーションの異なるブランチまたはバージョンをテストしている場合、異なるデータベース バージョン間で切り替えたい場合があります。この場合、新しいブランチがテストされるときに、データベースを自動的にダウンしてアップグレードすることができます。

進化失敗後の回復

SQL エラーが原因で 1 つの進化が失敗した場合 (運用システムまたはテスト システムで)、データベースを正常な状態に手動で復元する必要があることに注意してください。これは表を見ればplay_evolutionsわかります。There Play は、適用された進化とそのエラーを追跡します。最後のエントリには、最後に適用された進化と、発生したエラーが表示されます。

エラー メッセージから、通常は不正な SQL を追跡し、evolutions スクリプトを修正できます。その後、データベースを以前の進化バージョンに戻し、失敗した進化エントリをplay_evolutionsテーブルから削除できます。Play は新しい進化がまだ適用されていないと判断し、再度実行します。

お役に立てれば。

于 2013-12-30T13:19:22.040 に答える