テーマコンポーネントを rake コマンド経由でインストールしています。プラグイン自体と、rake コマンドによるインストールは問題なく動作します。また、/admin/customize/themes/40 などの管理画面 UI からアップグレードを行う場合も、問題なく動作します。しかし、同じ rake コマンドを使ってコマンドラインからアップグレードしようとすると問題が発生します。出力は期待通りになっていますが、変更が反映されません。これはバグでしょうか?
$ rake themes:install -- '--{"discourse-login-modal": {"url": "https://github.com/example/discourse-login-modal.git", "add_to_all_themes": true}}'
discourse-login-modal: is already installed. Updating from remote.
結果:
Installed: 0
Updated: 1
Errors: 0
問題の詳細をさらに追加します。アップグレード用の rake コマンドを実行しても、テーマコンポーネントには目に見える変化がありませんが、その後、管理 UI はアップグレードが適用されたと認識しています(スクリーンショットの撮影を見落としてしまいました)。
その後のテーマコンポーネントの変更により、管理 UI にはアップグレードが利用可能と表示されるようになりましたが、それを適用すると、ローカルの変更が上書きされるという警告が表示されます。これらの変更は、実際には適用されなかった rake install コマンドで適用したかったものそのものです。
.
@markvanlan さん、テーマのインストール用の rake コマンドへの取り組み、ありがとうございます!rake install によるアップグレードが機能しない理由がわかるでしょうか。
今週の少し後でこれを確認します。rake コマンドが動作していないとは知りませんでした。
アップデートが動作しない理由がわからなかったのですが、回避策としてアンインストールコマンドを追加することを考えました。rake install コマンドを実行する前にテーマをアンインストールすると、問題が解決しているようです。
このアプローチが妥当かどうかを確認するために、短い PR を提出しました: [WIP] FEATURE: Rake task to uninstall theme by chandandi · Pull Request #10138 · discourse/discourse · GitHub
この件についてフォローアップするのを忘れてしまい、申し訳ありません!
更新されない理由がわかりました。もし私の推測が正しければ、非常に簡単な修正で済むはずです。
ここには非常に奇妙な点があります。ThemesInstallTask がリモートテーマを更新すると、リモート情報は正しく更新されます(最新の SHA が表示され、ご指摘の通り commits_behind は 0 です)。
しかし、SCSS がデータベース内で更新されていません。キャッシュの無効化の問題かと推測していましたが、そうではありませんでした!データベース内の SCSS が更新されないのです。
このスクリーンショットでは値が異なるはずです
管理用テーマコントローラーが更新を処理する方法と、タスクがリモートテーマを更新する方法を比較して見ましたが、違いがわかりません。

この謎の真相を突き止めます。
問題の原因を突き止め、PR を作成しました。詳細は説明欄に記載しています。
マージ完了!更新が修正されました。