古いDiscourseインストール用のプラグインとテーマのバージョンを固定する (.discourse-compatibility)

:open_book: 背景

テーマやプラグインによっては、Discourse の最新バージョンでのみ互換性のある変更を加える必要がある場合があります。その場合、古いバージョンの Discourse に対して、プラグインの古い「ピン留めされた」バージョンを使用するように指示できます。

これは、テーマ/プラグインリポジトリのルートにある .discourse-compatibility ファイルを使用して実現されます。これは YAML ファイルであり、キーが Discourse コアのバージョンを指定し、値がテーマ/プラグインの対応するバージョンを表します。

Discourse コアのバージョンは、<= および < 演算子を使用して指定できます。<= は歴史的な理由からデフォルトですが、一般的には < を使用する方が理にかなっています。

:pushpin: テーマ/プラグインバージョンのピン留め

たとえば、Discourse コアが version.rb で見つかる 3.2.0.beta2-dev で変更を加え、プラグイン/テーマがそれに依存し始めた場合、.discourse-compatibility ファイルに次のようなエントリを追加します。

< 3.2.0.beta2-dev: abcde

ここで、abcde は、古いバージョンの Discourse で使用されるあなたのプラグインの「レガシー」コミットハッシュへの参照です。

これにより、古いバージョンの Discourse (例: 3.2.0.beta1 または 3.1.4) を使用しているすべてのユーザーは、テーマ/プラグインのバージョン abcde を使用します。3.2.0.beta2-dev 以上を使用しているすべてのユーザーは、引き続き最新バージョンを使用します。

:clipboard: 複数のエントリ

時間の経過とともに、.discourse-compatibility ファイルに複数の行を追加できます。Discourse は、現在の Discourse コアバージョンに一致する「最も低い」仕様を常に選択します。ファイル内の行の順序は技術的には重要ではありませんが、新しいエントリを先頭に配置することをお勧めします。

:git_merged: 古い Discourse バージョンのための変更の「バックポート」

特定のプラグインコミットにピン留めされた 2 つの異なるバージョン指定を持つ、次のような .discourse-compatibility ファイルを想像してみてください。

< 3.2.0.beta1-dev: commithashfordiscourse31
< 3.1.0.beta1-dev: commithashfordiscourse30

Discourse 3.1 に変更を「バックポート」する必要がある場合は、次のようにします。

  1. 古いコミットからブランチを作成します (git checkout -b my_branch_name commithashfordiscourse31)

  2. 変更をコミットし、origin にプッシュします。GitHub のブランチ保護機能を使用している場合は、偶発的な削除からこのブランチを保護したい場合があります。

  3. メインブランチ.discourse-compatibility ファイルを更新して、3.1 サポートブランチの新しいコミットを指すようにします。

:globe_showing_europe_africa: 実世界の例

これは、discourse-solved プラグインからの実際の .discourse-compatibility ファイルです。注目すべきは、執筆時点では、これはまだ明示的な < または <= 演算子なしの「レガシー」構文を使用していることです。したがって、各行は自動的に <= として解釈されます。


このドキュメントはバージョン管理されています - 変更の提案は github で行えます。

「いいね!」 17

バージョンが 3.5.0.beta8-dev より小さい場合、3.5.0 は含まれますか?

No. 3.5.0 は、リリース候補版の「3.5.0.beta8-dev」よりも「大きい」と見なされます。

常に Ruby コンソールで比較を試すことができます。

> Gem::Version.new("3.5.0") < Gem::Version.new("3.5.0.beta8-dev")
=> false
「いいね!」 5

承知いたしました。説明ありがとうございます!

「いいね!」 1