オートスケーリングによる Discourse のバージョン管理

Discourse のバージョン管理にはデフォルトまたは推奨される tests-passed を使用するのが一般的だと承知していますが、当チームではこれまで app.yml で Discourse のバージョンを明示的に指定していました(例:version: 2.7.0.beta1)。これは、本番環境にどのバージョンが存在するかを明示的に制御したいという理由によるものです。

しかし、このトピック で確認できたように、従来のようにバージョンを指定することを妨げるバグが存在することがわかりました。これは、当社のフォーラムにおけるオートスケーリングの仕組みにとって重大な問題です。例えば、現在本番環境でバージョン 2.7.0.beta1 が稼働しているとします。そこにフォーラムへのトラフィックが急増し、スケールアウトのために新しいインスタンスを起動する必要が生じたとしましょう。もし app.ymltests-passed が設定されており、前回の本番環境更新以降に別の Discourse リリースがあった場合、新しいインスタンス(2.7.0.beta2 など)が起動して既存のインスタンスと競合してしまいます。その結果、データベースの変更やその他の互換性の問題により、異なるバージョンが混在し、本番環境が正常に機能しなくなる可能性があります。

また、プラグインの互換性の問題や、本番環境へのリリース前にステージング環境で完全にテストしたいという一般的な要望など、このような自動更新を望まない他の理由も存在します。

なお、Discourse のバージョンを指定するために この解決策 を試みていますが、現在バージョン 2.7.0.beta3 では失敗しています。こちら で見られたのと同様の bundler エラーが発生しており、その方の解決策は tests-passed に戻すことだったと認識しています。

そこで質問です。当社のオートスケーリング環境と、本番環境にデプロイされる Discourse のバージョンを明示的に指定する必要があるという一般的な要件を踏まえると、Discourse のバージョン管理を効果的に制御するにはどうすればよいでしょうか。同様の状況で他の方がどのように対応されているか、ぜひお聞かせください。

オートスケーリングを使用する場合は、ブートストラップされたイメージをコンテナレジストリにプッシュし、そのイメージを使用してすべてのオートスケーリングインスタンスでDiscourseを実行する必要があります。

「いいね!」 5