rake によるテーマコンポーネントのアップグレードが機能しない

テーマコンポーネントを 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 が更新されないのです。

このスクリーンショットでは値が異なるはずです

管理用テーマコントローラーが更新を処理する方法と、タスクがリモートテーマを更新する方法を比較して見ましたが、違いがわかりません。

:male_detective: :mag:

この謎の真相を突き止めます。

問題の原因を突き止め、PR を作成しました。詳細は説明欄に記載しています。

マージ完了!更新が修正されました。