[Zope] CoreSession + Non-undoable databases
CJ Kucera
pez@apocalyptech.com
Tue, 9 Oct 2001 16:23:41 -0500 (CDT)
On Tue Oct 9 12:43:16 2001, Chris McDonough wrote:
> Ugh! This isn't as easy as it should be.
Excellent; thanks for your help. It appears to be working.
Some notes:
1) BerkeleyDB installs by default into /usr/local/BerkeleyDB.3.2
(obviously if you're installing a different version that'll be
slightly different). This means that to compile bsddb3 you have
to do the following:
$ python setup.py build_ext --inplace --berkeley-db=/usr/local...
What the bsdbb3 README files don't tell you is that you have to
pass in the --berkeley-db= line to the "python setup.py install"
command as well, or it won't be built properly. To find out if
it's been built properly, cd into "bsddb3/{arch}/bsddb3" [1] and:
$ nm _db.so | grep db_create
If you get a line like "000242e0 T db_create" you're okay. If you
get one like " U db_create" there's problems because it wasn't
linked properly. The "_db.so" created inside the "build" directory
during the initial "build_ext" step doesn't seem to actually have
anything to do with anything; the one under "bsddb3" gets compiled
at the "install" step.
2) The bsddb3Storage READMEs are a little obtuse. [2] When you've
untarred the package, you'll have a "bsddb3Storage" directory with
just .py files in it. THAT's the directory to copy into
{ZOPE_HOME}/lib/python/Products.
3) Also, the "custom_zodb.sample" mentioned in the docs doesn't
actually exist. It's "custom_zodb.py" in the current release
(1.0beta4), and the syntax of the file doesn't work in Python < 2
(so if you're using Python 2, you should be okay). The
custom_zodb.py I ended up using is here:
> from bsddb3Storage.Packless import Packless
> #from bsddb3Storage.Minimal import Minimal as ConcreteStorage
> #from bsddb3Storage.Full import Full as ConcreteStorage
>
> import os
> env = os.path.join('var', 'bsddb3Storage')
>
> Storage = Packless(name='BerkeleyStorage', env=env)
Note that the "env" line is telling the BerkeleyDB that it's
data directory will be in "var/bsddb3Storage" (your Data.fs
is in "var").
4) When you've created the "sessionData" folder in BerkeleyDB,
shut down your temporary Zope instance and I recommend tarring
up the bsddb3Storage directory under var, to move it over to
your "real" zope instance. For instance:
$ cd $TEMP_ZOPE/var; tar zcvf ../berkeleydb.tgz bsddb3Storage
5) Here's the correct syntax for "Extensions/sessionDB":
> import ZODB
> from bsddb3Storage import Packless
>
> def getSessionDB():
> return ZODB.DB(Packless.Packless('session','berkeleyStorage'))
Note that "berkeleyStorage" is the name of the directory where
the BerkeleyDB is going to be located (was "var/bsddb3Storage"
on your "temp" Zope instance earlier). So, using my tarfile from
before, here's basically what I did:
$ cd $ZOPE_HOME; tar zxf ../temp_zope/berkeleydb.tgz
$ mv bsddb3Storage berkeleyStorage
So for me, I put the BerkeleyDB Storage directory in the same
directory as var, lib, zpasswd.py, etc . . .
6) When it's been inserted into your tree, for all intents and
purposes it looks EXACTLY like just a regular folder, as far
as I can tell, which threw me off. There's even an "undo"
tab and everything. So be careful; there doesn't seem to be
an indication that it's actually an Externally Mounted
folder as opposed to a regular one.
In any case, after all that it appears to be working. You might
want to update your HOWTO with what I've mentioned here.
Thanks very much!
-CJ
[1] Replace "{arch}" with the directory there. On my system, it was
"lib.linux-i686-1.5"
[2] I lie. They're astonishingly useless. The READMEs distributed
with 1.0beta4 are actually the 1.0beta3 files, which may account
or most if not all of the problems. Under the "docs" directory
there's a "PacklessReadme.txt" that you're much better off not
reading. It makes references like "Once you've untarred the
product, you should have a subdirectory named
'PacklessBerkeley3Storage'" which turn out to be patently false.
So anyway . . . [3]
[3] I'm being a bit harsh; they're not really THAT bad, just overly
confusing at times. :)
WOW: Rapacious | A priest advised Voltaire on his death bed to
apocalyptech.com/wow | renounce the devil. Replied Voltaire, "This
pez@apocalyptech.com | is no time to make new enemies."