我使用plone.app.blob将大型ZODB对象存储在blobstorage目录中.这减少了Data.fs上的大小压力,但我无法找到有关备份此数据的任何建议.
我已经通过将网络备份工具指向repozo备份目录来备份Data.fs.我应该简单地将该工具指向blobstorage目录来备份我的blob吗?
如果正在重新打包数据库或在复制过程中添加和删除blob,该怎么办?blobstorage目录中是否有必须按特定顺序复制的文件?
什么是grok的粉碎(双关语)特征使它比django更好?我怎么知道我的项目何时需要grok + zope,或者它可以用django开发?
我是zope的新手,之前我在Django工作了大约2.5年.因此,当我第一次跳入Zope(第2版)时(仅因为我的新公司7年来一直使用它),我遇到了这些问题.请帮助我理解它们.
zodb的"真正"目的是什么?我知道它做了什么,但告诉我zodb做的一件好事和像Django(没有zodb)这样的框架未命中.
更新:根据答案,Zodb取代了对ORM的需求.您可以直接将对象存储在db(zodb本身)中.
据说,zope的杀手功能之一是TTW(通过网络或使用ZMI开发)的理念.但我(和任何开发人员)更喜欢基于文件系统的开发(使用Version控件,使用Eclipse,使用Zope之外的任何喜欢的工具).那TTW实际上在哪里使用?
这是一个很大的问题.与Python/Django继承相比,Zope的Acquistion获得了什么"EXTRA Stuff".
来自Django的Zope真的是一个很好的举动吗?
任何网站如djangosnippets.org for Zope(v2)?
我正在构建一个应用程序,使用collective.lead(trunk)查询外部关系数据库中的某些数据.用户可以在自定义Plone控制面板工具中修改数据库连接设置(我按照Aspeli的Professional Plone Development书中的示例).以这种方式查询数据库设置.
我的产品base.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"
/>
Run Code Online (Sandbox Code Playgroud)
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,
)
Run Code Online (Sandbox Code Playgroud)
这会在运行时引发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" …
Run Code Online (Sandbox Code Playgroud) 我的data.fs是500 MB,所以我打包然后备份它,导致100 MB.
我的主机帐户只有500 MB,所以我想知道删除data.fs.old(500 MB)是否安全?
虽然Zope 2.13具有本机wsgi支持,但我还没有找到任何文档/部署教程/文章/博客.
有人会指出/发布一个有效的例子吗?
我们正在使用Plone 4.1.3构建一个Intranet网站,并想知道Plone是否存在关于存储附加到页面的文件和图像的最佳实践.我们的Intranet更像是一个用户可以发布新闻项目和其他文章的协作网站.因此用户将插入图像(使用TinyMCE的插入/编辑图像)并将文件附加到页面.
问题:我们应该在哪里要求用户上传图像和文件?我们是否应该让用户将图像和文件上传到与页面本身相同的文件夹中?或者我们应该在与页面相同的文件夹内创建一个子文件夹,称为_images和_files,并分别将图像和文件上传到_images和_files文件夹.或者我们应该在页面的父文件夹之外创建一个公共顶级文件夹,让我们的用户将文件和图像上传到这个顶级文件夹(可能是这个顶级文件夹中的_images和_files子文件夹).例如,如果我们在我们的网站上有三个顶级文件夹:新闻,财务和工程 - 然后我们有另一个顶级文件夹调用说上传.用户将在新闻中创建页面,当他们使用TinyMCE在页面中插入图像时,他们将上传到顶级文件夹Uploads而不是上传到与页面相同的文件夹.
将图像和文件存储在与页面相同的文件夹中或页面文件夹内的子文件夹中的第一种方法的问题是图像和文件将散布在整个地方.
为了存储所有上传的图像和文件而创建顶级文件夹的第二种方法的问题在于它似乎不是Plone的做事方式 - 将与页面相关的所有内容保持在与文件夹相同的文件夹中页面或相同的父文件夹.
在插入图像(通过TinyMCE插入/编辑图像按钮)和页面中的文件链接时,是否有Plone最佳实践在哪里上传图像和文件?Plone的方式是什么?
有什么想法吗?
非常感谢您的期待.
看着我的ZEO工作人员,我会看到很多:
2013-10-18T11:59:54 INFO ZPublisher.Conflict ConflictError at
/VirtualHostBase/http/www.domain.com:80/Plone/VirtualHostRoot/:
database conflict error (oid 0x533cd5, class
persistent.mapping.PersistentMapping) (78 conflicts (0 unresolved)
since startup at Mon Oct 14 04:09:45 2013)
Run Code Online (Sandbox Code Playgroud)
因为他们被记录,INFO
我认为这根本不是有害的吗?
而且我想如果发生冲突是因为ZODB上的写入太多了?
我正在使用
Zope - 2.13.19
Python - 2.6.8
Run Code Online (Sandbox Code Playgroud)
下面的代码在手动运行时有效,但在外部方法时则无效.它会引发以下错误.我在做概念错误的事情吗?
Exception in thread Thread-3:
Traceback (most recent call last):
File "/opt/python2.6/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/opt/python2.6/lib/python2.6/threading.py", line 484, in run
self.__target(*self.__args, **self.__kwargs)
File "/opt/python2.6/lib/python2.6/multiprocessing/pool.py", line 225, in _handle_tasks
put(task)
TypeError: expected string or Unicode object, NoneType found
import time
from multiprocessing import Pool
import logging
def func(name):
print 'hello %s,' % name
time.sleep(5)
print 'nice to meet you.'
def get_data():
pool = Pool(processes=2)
pool.map(func, ('frank', 'justin', 'osi', 'thomas'))
Run Code Online (Sandbox Code Playgroud) 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) zope ×10
plone ×7
zodb ×4
python ×3
django ×2
acquisition ×1
blobstorage ×1
grok ×1
postgresql ×1
pyramid ×1
python-2.6 ×1
python-pool ×1
registry ×1
sqlalchemy ×1
wsgi ×1