2014-01-22 120 views
0

當我啓動一個Zope實例時,在我的日誌文件中出現一個奇怪的錯誤。該實例正在運行ZEO服務器,並且Zope安裝是virtualenv(在/ home/myUser/opt中)。我得到了幾個產品的錯誤,但Zope工作正常,並且安裝了這些產品。下面是與產品BTreeFolder2一個例子:Zope:奇怪的「無法安裝」錯誤

2014-01-22T12:38:13 ERROR Application Couldn't install BTreeFolder2 
Traceback (most recent call last): 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/Zope2-2.13.21-py2.7.egg/OFS/Application.py", line 693, in install_product 
    transaction.commit() 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/transaction-1.1.1-py2.7.egg/transaction/_manager.py", line 89, in commit 
    return self.get().commit() 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/transaction-1.1.1-py2.7.egg/transaction/_transaction.py", line 329, in commit 
    self._commitResources() 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/transaction-1.1.1-py2.7.egg/transaction/_transaction.py", line 446, in _commitResources 
    rm.tpc_vote(self) 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZODB/Connection.py", line 781, in tpc_vote 
    s = vote(transaction) 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZEO/ClientStorage.py", line 1098, in tpc_vote 
    return self._check_serials() 
    File "/home/myUser/opt/Zope2-2.13.21/local/lib/python2.7/site-packages/ZODB3-3.10.5-py2.7-linux-x86_64.egg/ZEO/ClientStorage.py", line 929, in _check_serials 
    raise s 
ConflictError: database conflict error (oid 0x01, class OFS.Application.Application, serial this txn started with 0x03a449da3a7b1e44 2014-01-22 11:38:13.706468, serial currently committed 0x03a449da3af74dee 2014-01-22 11:38:13.820164) 

我想解決這個問題,即使它不會影響我的網站的功能,但我不知道去哪裏找。有什麼建議麼? :)

或者這是否意味着緩存的對象必須更新ZEO服務器的數據?

回答

1

當一個Zope實例啓動時,它將擴展(Products)註冊到ZODB中。但是,當您運行共享ZEO服務器的多個實例時,它們大致同時啓動,在此階段會遇到衝突。這些衝突本質上是無害的,它們只發生,因爲另一個實例成功安裝持久組件。

解決方案是配置不註冊產品的實例,除了一個(通常是多機羣集中的每臺機器一個);那麼在重新啓動時,只有其中一個實例進行註冊,其餘的運行相同的軟件堆棧將不必。

請注意,在最近的Zope安裝中,產品的持久部件已被棄用且大部分被禁用;如果您不使用通過Web的產品或ZClasses,您可能根本不需要啓用此功能。

當您確實需要它時,請將zope.conf中的enable-product-installation配置設置爲on僅限一個實例,其餘爲off。如果使用buildoutplone.recipe.zope2instance recipe,則可以在構建配方配置中指定此設置。

+0

感謝Martijn,經常這樣,你讓我的一天:)我仍然使用我的產品文件夾中的一些產品,所以在這種情況下,我還需要啓用產品安裝開關,但是我會禁用它在其他實例。但是,我猜這些產品必須出現在所有實例的產品文件夾中? – Rastaf