我有Plone产品,它使用自定义文件夹类型来包含一组自定义内容对象.文件夹类型是通过子类化BaseFolder创建的,它有一个包含几个文本字段的模式.目前,当自定义对象添加到自定义文件夹时,对象按其字母顺序排序.如何覆盖此行为并允许我的用户手动对自定义文件夹进行排序,例如通过"内容"视图?
我必须运行一个传统的Zope2网站,并对此有一些不满.最大的问题是,它偶尔会锁定,以100%的CPU负载运行而不再响应请求.虽然这个问题不能定期重现,但是有时会有一个包含3个动态图形的页面触发它,所以我怀疑某种竞争条件会导致无限循环或陷入忙碌状态.
问题是,我还没有找到调试这个东西的方法.Zope日志中没有任何内容,系统日志中没有任何内容.我尝试了这个问题的建议来获得一个堆栈跟踪,但唯一有效的信号是SIGKILL.
是否还有另一种可能性来确定卡住的过程究竟在哪里?
所以他们都与zope有某种关系.问题是怎么样的?
我对Zope不熟悉.我想,ZC,Z3C代表Zope Component和Zope3 Component,但我想肯定.还有一个collective命名空间.它下面有什么样的套餐?
什么是其他众所周知的python包命名空间?
当包用zc,z3c和其他包命名时,是否有任何约定?
有时我看到以zc开头的包,我无法理解为什么它们是命名空间的.例如,z3c.sqlalchemy有命名空间,因为它是sqlalchemyzope项目的包装器.但另一个例子zc.buildout看起来像一个完全独立的项目.它是否仅仅因为它是由在Zope上工作的人开发而得到名称空间?如果我会在Zope上工作,那就意味着我应该为我的项目添加前缀,zc即使它们与任何其他Zope包都不相关?
我知道为了性能,最好nocall在a 上使用<tal:condition>以避免调用对象.会欣赏(链接)一些背景,因为这对我来说听起来有点模糊:-)
所以你什么时候使用nocall?把它放在我所有的条件下会不会受伤?
谢谢 !
我正在尝试在类中使用属性装饰器.虽然它本身很好用,但我不能使用任何必须访问的代码REQUEST.
class SomeClass():
#Zope magic code
_properties=({'id':'someValue', 'type':'ustring', 'mode':'r'},)
def get_someValue(self):
return self.REQUEST
@property
def someValue(self):
return self.REQUEST
Run Code Online (Sandbox Code Playgroud)
虽然打电话get_someValue让我得到了理想的结果,但试图访问someValue会引发一个问题AttributeError.
这种行为背后的逻辑是什么?有没有办法解决这个限制?
(我使用的是Zope 2.13.16,Python 2.7.3)
在Plone中创建BrowserView时,我知道我可以选择使用ZCML配置模板,如下所示:
<configure
xmlns:browser="http://namespaces.zope.org/browser"
>
<browser:page
…
class=".foo.FooView"
template="foo.pt"
…
/>
</configure>
Run Code Online (Sandbox Code Playgroud)
或者在代码中:
# foo.py
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from zope.publisher.browser import BrowserPage
class FooView(BrowserPage):
"""
My View
"""
def __call__(self):
return ViewPageTemplateFile('foo.pt')(self)
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别吗?它们似乎都产生相同的结果.
子问题:我知道有一个BrowserView类可以导入,但通常每个人都使用BrowserPage.如果这两个类之间存在任何显着差异怎么办?
我正在尝试在@@ personal-information上更新成员属性后执行操作,但事件未被触发.在configure.zcml上我放了以下内容:
<subscriber
for="Products.PluggableAuthService.interfaces.events.IPropertiesUpdatedEvent"
handler=".subscribers.propertiesUpdated"
/>
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用ipdb检查subscriber.py的propertiesUpdated是否正在执行,但事实并非如此.
我已经检查了https://bugs.launchpad.net/zope-pas/+bug/795086错误报告,该报告说这个错误已经修复,但它仍然无效.
我正在使用PluggableAuthService 1.10.0.
有没有更好的方法来解决这个问题?
PostgreSQL和SQL定义了Serializable事务隔离级别.如果将事务隔离到此级别,则冲突的并发事务将中止并需要重试.
我熟悉Plone/Zope世界的事务重试概念,在发生事务冲突的情况下可以重放整个HTTP请求.如何使用SQLAlchemy(以及可能使用zope.sqlalchemy)实现类似的功能?我试着阅读zope.sqlalchemy和Zope事务管理器的文档,但这对我来说并不明显.
特别想要这样的东西:
# Try to do the stuff, if it fails because of transaction conflict do again until retry count is exceeded
with transaction.manager(retries=3):
do_stuff()
# If we couldn't get the transaction through even after 3 attempts, fail with a horrible exception
Run Code Online (Sandbox Code Playgroud) 在工作中,我们时不时地要求返回那么久,当它们完成时,前端(nginx)已经杀死了连接,因此用户将看不到输出(无论是好还是坏).
最糟糕的是,平衡器(haproxy)也将终止连接,然后假设服务器可以自由处理另一个请求,这意味着当服务器仍在处理旧请求时,新的请求会进入并争夺资源.
理想情况下,服务器应该一次只处理一个请求以尽可能多地重用与ZEO数据库的连接线程,因此同时运行两个请求会使服务器更慢,然后我们的一个监控系统正确地重新启动plone因为假人证明它发送时间.
所以给定一些逻辑(可能重用我们已经使用的Products.LongRequestLogger)有没有办法告诉线程处理请求停止这样做?
使用 SQLAlchemy 和 Zope 事务管理器时,在 Pyramid 应用程序中遇到以下错误。
这就是我创建范围会话的方式:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.schema import MetaData
from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)
from zope.sqlalchemy import ZopeTransactionExtension
metadata = MetaData(naming_convention=NAMING_CONVENTION)
Base = declarative_base(metadata=metadata)
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(keep_session=True)))
Run Code Online (Sandbox Code Playgroud)
我通过以下方式将我的会话创建和删除与我的请求同步:
@view_config(route_name='social_get_individual_assets', renderer='json', effective_principals=2, permission='edit')
def social_get_individual_assets(requestJson):
session = DBSession()
try:
body = requestJson.request.json_body
search_term = body['text']
horizontal = body['horizontal']
vertical = body['vertical']
log.info("social get individual assets request: %s", str(search_term).encode(encoding='utf_8'))
json_data = get_individual_assets(session, search_term, horizontal, vertical)
log.info("social get assets response: %s", str(search_term).encode(encoding='utf_8'))
transaction.commit()
DBSession.remove() …Run Code Online (Sandbox Code Playgroud) zope ×10
python ×8
plone ×5
performance ×2
pyramid ×2
sqlalchemy ×2
archetypes ×1
debugging ×1
events ×1
postgresql ×1
properties ×1
request ×1
template-tal ×1
transactions ×1
zcml ×1
zpt ×1