簡単な質問です。
きっと、私の脳細胞が不足しているのでしょう!
/var/www/discourse/app/views/layouts ディレクトリ内のファイルのいくつかで、アプリコンテナ内でいくつかの編集を行いました。
その後、愚かなことに、/var/discourse/launcher rebuild app コマンドでコンテナを再構築すればよいと考えてしまいました(ダメでした)。しかし、毎回このコマンドを実行すると、私たちの編集が上書きされてしまいます。
Discourse をフォークしたくはありませんが、ローカルの編集が上書きされないように、launcher を使用してアプリを再構築したいと考えています。
どのようにすればよいか、教えてください。
ありがとうございます!
appの再ビルド中に、試したあらゆる方法がファイルの上書きを引き起こしていた原因が見つかったようです:
その理由は、launcherがベースのDiscourseイメージをプルしており、そのイメージ内に.gitディレクトリが含まれていて、gitの設定ファイルが自然とメインのDiscourseリポジトリを指しているため、私たちの変更が上書きされてしまうことです:
launcher
pull_image() {
# Docker HubのTLSエラーに対処するため、リトライを1回追加
$docker_path pull $image || $docker_path pull $image
}
以前は誤ってlauncherがイメージをビルドしていると考えていましたが(なぜそれに気づかなかったのでしょう?!)、実際にはDocker Hubからベースイメージをプルしていることが明確になりました。
もう一度ゼロから考え直しましょう!
launcherがベースイメージをプルするのを防ぎ、代わりにビルドするようにするフラグは存在しますか?
neounix
(Dark Matter)
4
@DBHacker さん、こんにちは
おそらく、以下のような手順を試してみるのがよいでしょう:
- ベースコンテナに変更を加える(ご指摘の通り)
- そのイメージにタグを付け、保存する
- そのイメージを独自の Docker イメージリポジトリにプッシュする
launcher を編集し、リポジトリから変更されたベースイメージを docker pull で取得するようにする
少しでもお役に立てれば幸いです!
なお、これは Meta 側では(少なくとも私の知る限りでは)サポートされていませんので、自己責任となります。
ハッキングを楽しんでください! 
注:私は実際に試していませんが、楽しんでいるようですね! 
「いいね!」 1
pfaffman
(Jay Pfaffman)
5
プラグインまたはテーマコンポーネントでそれらの変更を行う必要があります。
「いいね!」 6
neounix
(Dark Matter)
6
こんにちは @pfaffman さん
プラグインやテーマコンポーネントが最善策であることに完全に同意します!その方法は公式にサポートされており、Meta 開発チームとの連携を維持する上で最適です。
また、好奇心を持って可能性を探求し、Discourse の理解を深めることも重要です。昨日のこのトピックを読んでから、私はローカルの Docker レジストリを作成し、Discourse のベースイメージをローカルでタグ付けして、新しい Docker レジストリ(localhost)にプッシュしました。その後、そのベースイメージをローカルレジストリから取得して Discourse アプリを再構築しました。
実験して Discourse についてさらに学ぶのは楽しいもので、このシステム管理者向けの探索/実験から多くのことを学びました。もちろん、これは本番環境でアプリケーションを実行する方法ではありませんが、Discourse のベースイメージをリモートではなく localhost から取得するために必要な手順を踏むことで多くのことを学びました。驚くほど簡単だったため、この実験を他の好奇心旺盛なシステム管理者と共有するためにまとめました。
この実験が他のシステム管理者の探求者にも何かしらの形で役立つことを願っています。
好奇心を持ち続けてください
「いいね!」 1
Stephen
(Stephen)
7
画像の扱いやプラグイン作成を気にせず、これを非常に簡単に実装する方法があります。既存のフラットファイルを変更するだけなら、app.yml からそれらを修正できます。
hooks と pups を検索してください。他のいくつかのガイドでもすでにこのアプローチが採用されています。
「いいね!」 5
@neounix さん、ありがとうございます。
私も新しいことを学び、試すのが好きです。
いつか時間ができたら、Docker とローカルレジストリについてもっと学んでみようと思います。
当面は、Discourse によってサポートされ、Discourse の開発モデルに合致しているプラグイン開発に専念します。
おっしゃる通り、これらのことを学ぶのは楽しいですが、主流にとどまることも大切です!

「いいね!」 2
neounix
(Dark Matter)
9
同意します。
ローカルの Docker レジストリとローカルの Discourse ベースイメージで実験した後も、一貫した結果を得ることができませんでした(なぜか不明ですが、設定上の重要な詳細を見落としているに違いありません)。
その一方で、ローカルの Docker レジストリについて、またそれを構築・管理する方法について多くを学びました。
単なるサイドプロジェクトとしての Docker 実験でしたが、間違いなく多くのことを学びました!
「いいね!」 1
はい、唯一の実用的な選択肢はプラグインのようです。
皆様からの返信とご支援、ありがとうございます。
「いいね!」 2