2012-05-13 15 views
3

問題の核心は、GenericSetupプロファイルが追加的であることです。製品を単にプロファイルを適用するだけでアップグレードすることはできず、プロファイルのチェーン全体を特定の順序で適用する必要があります。Plone 4よりスマートな汎用セットアップの更新が必要

たとえば、多くの独立したサイトポリシー(ploneインスタンスに のいずれか1つだけが適用されます):S1、S2、....、SN。たとえば、AとBの2つの製品は、次のようになります。Sn - > A - > B

レジストリが途中で何かを無効にする。 (同じことがtypeinfoやその他のプロファイルステップの場合もあります)。 S1で上書きされる可能性のある製品Aで何かが変更された場合、S1サイトのボタンを押すと、独自のポリシーの上書きが失われるため、Aのアップグレード手順を実行できません。しかし、S1-SNのすべてのアップグレード手順を書くのは大変です。

上記のケースでは、問題が全体的にB、A、Snの順にレジストリアップデートを適用することで解決できます。 (それでも、いくつかの難しいケースがあるかもしれない)?

パッケージAはS1(またはS2または何らかのサイトポリシーが起こっていること)を知らないので、アップグレードのチェーンについて明確な知識を持つことができる「スーパーパッケージ」を作ることです。 しかし、結果のプロファイルを常にポリシーに入れること以外は、他にも解決策がありますか?

(簡単にするために、いくつかの変更は、ウェブを介して行うことができることを忘れすることができます)

答えて

0

通常のアップグレード作業を容易にするためのヘルパー機能を備えたカスタムソリューションを使用することに決めました。すべての問題を解決するわけではありませんが、展開に役立ちます。

1

それはすべての製品が、残念ながら使用ものではありませんとはいえこれは、GSですでに実際にあります。 解決策は、GSのupgradeStepを使用しています。

はあなたがこのようなアップグレード手順を登録し、あなたのZCMLでは2にバージョン1からのプロファイルのメタデータを変更すると言う:one_to_two.py

<genericsetup:upgradeStep 
     title="Upgrade myproduct from revision 1 to 2" 
     description="" 
     source="1" 
     destination="2" 
     handler="myproduct.one_to_two.upgrade" 
     sortkey="1" 
     profile="myproduct:default" 
     /> 

あなたは、あなたがそこに

def upgrade(context): 
    registry = getUtility(IRegistry) 
    if 'foo' in registry: 
     do_stuff() 

インサイドを持っているでしょう特定のインポート手順を再実行することもできます。

context.runImportStepFromProfile('profile-myproduct:default','actions') 

彼の製品がアップグレードされた場合は、のみがアップグレードステップハンドラで指定されたものが適用されます。これはまさに必要なものです。

すべてに関するドキュメントhere

+0

もちろん、私はアップグレードの手順を知っています。 Pls、問題文を再度読んでください。 「... Aサイトのボタンを押したときに、ポリシーの上書きが失われるため、Aのアップグレード手順を実行できません。 –

関連する問題