Sitecore 9.0以降ではルールベースのconfigに対応しており、検索プロバイダやサーバーロールに応じて異なるconfigを適用できるようになりました。これらの情報はWeb.configで*:define
という名前のApp Settingsを用いて定義されています。
<!-- 他にもたくさんあります。 -->
<add key="role:define" value="ContentDelivery" />
<add key="search:define" value="Solr" />
<add key="exmEnabled:define" value="yes" />
これらの他にenv:define
という独自の環境名を定義することができる設定が用意されており、これを用いることでデプロイスロットにだけconfigを設定することができます。
手順
- Azureポータルでデプロイスロットを開き、Configurationを選択します。
- New application settingを選択します。
- Nameに
env:define
を、ValueにStaging
を入力して、Deployment slot settingにチェックを入れます。 - Stagingだけに適用したいconfigの属性に
env:require="Staging"
を追加します。
<!-- 名前空間 env を宣言 -->
<configuration xmlns:env="http://www.sitecore.net/xmlconfig/env/" xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<settings>
<!-- envがStagingのサーバーは異なるURLを使用する -->
<setting name="Media.MediaLinkServerUrl" env:require="Staging">
<patch:attribute name="value">http://staging.example.com</patch:attribute>
</setting>
</settings>
</sitecore>
</configuration>
これでデプロイスロットだけにconfigが適用されます。Deployment slot settingにチェックを入れた設定はスワップしてもスワップ前のサーバーに適用されるので、このような挙動を実現できます。
また以下のように!
を使って指定した環境名以外に適用することも可能です。
<configuration xmlns:env="http://www.sitecore.net/xmlconfig/env/">
<sitecore>
<settings>
<!-- envがStagingの場合はFooを使用 -->
<setting name="MySetting" value="Foo" env:require="Staging" />
<!-- それ以外ではBarを使用 -->
<setting name="MySetting" value="Bar" env:require="!Staging" />
</settings>
</sitecore>
</configuration>
Top comments (0)