在启动时查询注册表时发生ComponentLookupError
||
我正在构建一个应用程序,该应用程序使用Collective.lead(树干)查询外部关系数据库中的某些数据。用户可以在自定义的Plone控制面板工具中修改数据库连接设置(我遵循了Aspeli \'s Professional Plone Development一书中的示例)。以这种方式查询数据库设置。
我产品的基本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具有:
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,
)
这在运行时引发ComponentLookupError异常:
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\"
/>
为什么在运行时找不到注册表?我究竟做错了什么?
谢谢。
没有找到相关结果
已邀请:
3 个回复
提孺局缎
这样可以保证“ 4”可以访问所有本地公用程序。还要注意,“ 4”在查询该实用程序是否已存在之后也会迅速返回,因为订户将在每个请求上触发。
扫窟
缮记箔