collective.lead (트렁크)를 사용하여 외부 관계형 데이터베이스의 일부 데이터를 쿼리하는 응용 프로그램을 빌드하고 있습니다. 사용자는 사용자 정의 Plone 제어판 도구에서 데이터베이스 연결 설정을 수정할 수 있습니다 (Aspeli의 Professional Plone Development 설명서의 예를 따랐습니다). 데이터베이스 설정은 이런 식으로 쿼리됩니다.시작할 때 레지스트리를 쿼리 할 때 ComponentLookupError
내 제품의 기본 configure.zcml 데이터베이스에 대한 유틸리티 설정 :
<include package="plone.app.registry" />
<include package="collective.lead" />
<i18n:registerTranslations directory="locales" />
<utility
provides="collective.lead.interfaces.IDatabase"
factory=".dbsettings.CalculatorDatabase"
name="test.calc.db"
/>
dbsettings.py이있다 : 이것은 런타임에 ComponentLookupError 예외를 제기
from zope.component import getUtility
from plone.registry.interfaces import IRegistry
class CalculatorDatabase(Database):
@property
def _url(self):
registry = getUtility(IRegistry)
settings = registry.forInterface(IDatabaseSettings)
return URL(
drivername=settings.drivername,
username=settings.username,
password=settings.password,
host=settings.hostname,
port=settings.port,
database=settings.database,
)
:
를File "/home/zope/envs/test-web/src/test.calc/test/calc/dbsettings.py", line 38, in _url
registry = getUtility(IRegistry)
File "/home/zope/envs/test-web/eggs/zope.component-3.7.1-py2.6.egg/zope/component/_api.py", line 171, in getUtility
raise ComponentLookupError(interface, name)
zope.configuration.config.ConfigurationExecutionError: <class 'zope.component.interfaces.ComponentLookupError'>: (<InterfaceClass plone.registry.interfaces.IRegistry>, '')
in:
File "/home/zope/envs/test-web/src/test.calc/test/calc/configure.zcml", line 26.2-30.6
<utility
provides="collective.lead.interfaces.IDatabase"
factory=".dbsettings.CalculatorDatabase"
name="test.calc.db"
/>
런타임에 레지스트리가 발견되지 않는 이유는 무엇입니까? 내가 도대체 뭘 잘못하고있는 겁니까?
감사합니다.
감사합니다. 가장 깨끗한 솔루션입니다. – zedr