2012-06-21 29 views
1

我在一個站點上安裝了collective.formcriteria,然後從Buildout中刪除了&。Plone 4:collective.formcriteria卸載現在不能導入站點

當我出口我的網站,它工作正常,但試圖導入該網站給了我這個錯誤:

Traceback (innermost last): 

    Module ZPublisher.Publish, line 127, in publish 
    Module ZPublisher.mapply, line 77, in mapply 
    Module ZPublisher.Publish, line 47, in call_object 
    Module OFS.ObjectManager, line 628, in manage_importObject 
    Module OFS.ObjectManager, line 646, in _importObjectFromFile 
    Module ZODB.ExportImport, line 92, in importFile 
    Module transaction._transaction, line 253, in savepoint 
    Module transaction._transaction, line 250, in savepoint 
    Module transaction._transaction, line 647, in __init__ 
    Module ZODB.Connection, line 1128, in savepoint 
    Module ZODB.Connection, line 570, in _commit 
    Module ZODB.ExportImport, line 175, in _importDuringCommit 

ImportError: No module named formcriteria.criteria.relativepath 

將重新安裝這個插件,並試圖導入/導出我的網站的工作或有另一種修復?

謝謝。

+0

您是否可以包含日誌中的完整回溯? –

+0

回溯:[link](http://pasteit.com/18049) – Dan

回答

2

在導入期間,ZODB必須重新映射被傾銷的pickles中的持久性id,並且這樣做必須「加載」導出文件中的所有條目。

在重新映射過程中,它會嘗試導入每個引用的類。您的導出仍然保留對collective.formcriteria類的引用,這就是您在導入過程中遇到錯誤的原因。

有兩件事情可以做:

  1. 只爲這導入工作安裝collective.formcriteria到您的擴建。沒有必要運行安裝代碼或任何東西,Zope進程只需要能夠在導入過程中導入類。之後您可以再次將其刪除。

  2. 用空存根填寫缺少的進口。這有點多,因爲您需要創建一個虛擬模塊,您將爲此過程加載到sys.modules中。

    虛擬模塊可能看起來像這樣;我把它命名爲「placeholder.py」:

    from persistent import Persistent 
    
    class PlaceHolderClass(Peristent): 
        def __repr__(self): 
         return "<Persistent placeholder class for now-removed instances>" 
    

    你存根出缺少進口:

    import sys 
    import placeholder 
    
    sys.modules['collective.formcriteria.criteria.relativepath'] = placeholder 
    
    placeholder.FormRelativePathCriterion = placeholder.PlaceHolderClass 
    

    它很可能你需要存根出更多這樣的課程的基礎上, collective.formcriteria package layout

    使用此技術不會刪除損壞的引用;它只會讓你導入你的.zexp文件到一個新的實例中。

+0

謝謝,但我很快將舊網站的內容導入了一個新的Plone站點(在我的工作中,我並沒有真正被允許訪問服務器通過CLI)。謝謝你的回答,雖然 – Dan

+0

+1,你不僅是一位專家,你也知道,如何以全面的方式將它傳遞給人們,非常感謝。 –