> > And now that we've learned that Plone products live in the filesystem
> > (of the front ends) as well as the database (on the backend), I'm
> > curious if there's any work being done to scale out the back end too.
>
> Only data lives in the database. "Data" includes settings and content,
> and can include templates, but whilst they are loaded from a ZEO DB
> server, they are executed by the ZEO client handling the request.
If you upgrade certain products, like PloneCAS, the settings in the database
will prevent the Product from working, even with the new product files.
So, we have to go through and uninstall the product in Plone, before upgrading
the product.
Unfortunately, for some badly-behaved products (like PloneCAS), you can't
successfully uninstall it in the ZMI, either, to get rid of the troublesome
database settings.
And, it doesn't work on Plone 3.
> > Our Zope/Plone setup with 20+ instances falls over 4-5 times a day.
>
> I would caution against having 20+ instances in in a single Zope setup.
Sorry, to be more specific, I mean 20+ Plone sites on an instance. Or is that
still too many?
Should we be separate out more instances (thus, ZEO backends), or servers?
That's the aforementioned scalability issue.
Theoretically, I'd like a flock of Zope front ends, and group of ZEO storage
units, and as many sites as needed on them. (That way, I could get redundancy
for 20 sites in under 60 boxes.)
But yes, we already carved out our main site and put it on a separate box, just
to see if we could make sense of the errors and isolate the problem.
> Look at www.supervisord.org, but you shouldn't need to restart. You
> need
> to identify why it falls over, not try to plaster over the symptom.
> Start by looking at your logs to understand why it's falling over.
Logs, yeah, we looked at them all right. Posted questions about them, hung out
on the zope IRC channel, etc. Not much help.
For one thing, they were causing some of the issues by themselves, writing to
disk when certain errors were triggered every 200 milliseconds or so. So we had
to curtail them just on that.
Here's an example of what our log files told us (this one fires off up to twice
per second now, on a box running 1 site, since we just turned detailed logging
back on):
2008-05-09T10:52:41 ERROR root Exception while rendering an error message
Traceback (most recent call last):
File "/usr/local/lib/zope/lib/python/OFS/SimpleItem.py", line 223, in
raise_standardErrorMessage
v = s(**kwargs)
File "/home/zope/instance1/Products/CMFCore/FSPythonScript.py", line 108, in
__call__
return Script.__call__(self, *args, **kw)
File "/usr/local/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line
311, in __call__
return self._bindAndExec(args, kw, None)
File "/usr/local/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line
348, in _bindAndExec
return self._exec(bound_data, args, kw)
File "/home/zope/instance1/Products/CMFCore/FSPythonScript.py", line 164, in
_exec
result = f(*args, **kw)
File "Script (Python)", line 18, in standard_error_message
File "/usr/local/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line
311, in __call__
return self._bindAndExec(args, kw, None)
File "/usr/local/lib/zope/lib/python/Shared/DC/Scripts/Bindings.py", line
348, in _bindAndExec
return self._exec(bound_data, args, kw)
File "/home/zope/instance1/Products/CMFCore/FSPageTemplate.py", line 195, in
_exec
result = self.pt_render(extra_context=bound_names)
File "/home/zope/instance1/Products/CacheSetup/patch_cmf.py", line 48, in
FSPT_pt_render
result = FSPageTemplate.inheritedAttribute('pt_render')(
File "/home/zope/instance1/Products/CacheSetup/patch_cmf.py", line 123, in
PT_pt_render
tal=not source, strictinsert=0)()
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 238, in
__call__
self.interpret(self.program)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 749, in
do_useMacro
self.interpret(macro)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 457, in
do_optTag_tal
self.do_optTag(stuff)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 442, in
do_optTag
return self.no_tag(start, program)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 437, in
no_tag
self.interpret(program)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 780, in
do_defineSlot
self.interpret(block)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 780, in
do_defineSlot
self.interpret(block)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 457, in
do_optTag_tal
self.do_optTag(stuff)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 442, in
do_optTag
return self.no_tag(start, program)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 437, in
no_tag
self.interpret(program)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 728, in
do_defineMacro
self.interpret(macro)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 772, in
do_defineSlot
self.interpret(slot)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 281, in
interpret
handlers[opcode](self, args)
File "/usr/local/lib/zope/lib/python/TAL/TALInterpreter.py", line 507, in
do_setLocal_tal
self.engine.setLocal(name, self.engine.evaluateValue(expr))
File "/usr/local/lib/zope/lib/python/Products/PageTemplates/TALES.py", line
221, in evaluate
return expression(self)
File "/usr/local/lib/zope/lib/python/Products/PageTemplates/ZRPythonExpr.py",
line 47, in __call__
return eval(code, g, {})
File "Python expression
"here.portal_redirection.getRedirectFromPathInfo(request.PATH_INFO)"", line 1,
in <expression>
File "/home/zope/instance1/Products/RedirectionTool/RedirectionTool.py", line
205, in getRedirectFromPathInfo
pathelements = pathelements[pathelements.index(siteroot[-1])+1:]
ValueError: list.index(x): x not in list
If you have any ideas on how to fix this, I'd love to hear about it. We've
spent a couple hundred hours on the problems so far ...
>
> Martin
>
> --
> Author of `Professional Plone Development`, a book for developers who
> want to work with Plone. See http://martinaspeli.net/plone-book
>
>
> _______________________________________________
> Setup mailing list
> [email protected]
> http://lists.plone.org/mailman/listinfo/setup
_______________________________________________
Setup mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/setup