- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个应用程序,使用collective.lead(主干)查询外部关系数据库中的一些数据。用户可以在自定义 Plone 控制面板工具中修改数据库连接设置(我遵循 Aspeli 的 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"
/>
为什么在运行时找不到注册表?我做错了什么?
谢谢。
最佳答案
Steve提到的是问题的根源,所以我只会为无法进行异常处理的情况添加解决方法。在类似的情况下,我需要注册一个实用程序,该实用程序取决于注册表中存储的设置。如果没有这些设置,该实用程序就无法注册,所以我绝对希望事情按顺序发生。
解决方法是不在 zcml 中注册该实用程序,而是在以下订阅者中进行注册:
<subscriber
for="Products.CMFPlone.interfaces.IPloneSiteRoot
zope.app.publication.interfaces.IBeforeTraverseEvent"
handler=".component.setupStuff"
/>
这将保证setupStuff
能够访问所有本地实用程序。另请注意,setupStuff
也会在查询该实用程序是否已存在后快速返回,因为订阅者将在每个请求时触发。
关于registry - 启动时查询注册表时出现 ComponentLookupError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346391/
我正在构建一个应用程序,使用collective.lead(主干)查询外部关系数据库中的一些数据。用户可以在自定义 Plone 控制面板工具中修改数据库连接设置(我遵循 Aspeli 的 Profes
我有一个具有多种敏捷类型的自定义产品,setuphandler 使用其中的几种来创建站点结构。这在测试之外没有任何问题,但在测试中它总是失败: Traceback (most recent call
以下是我正在处理的灵巧内容类型的片段。有两种内容类型,程序和项目。应该可以将项目与程序相关联(我在下面将其定义为 RelationChoice)。 from five import grok from
我在为我的产品运行测试时遇到了这个错误,在 Plone 3.3.5 上使用 plone.app.testing 编写: ComponentLookupError: (, '') 但产品在测试之外正常工
我是一名优秀的程序员,十分优秀!