How do you upgrade zope without affecting your current database? Just copy it into the new var-directory? -- Magnus Lie Hetland www.pvv.org/arcadia <arcadia@pvv.org>
Magnus Lie Hetland wrote:
How do you upgrade zope without affecting your current database? Just copy it into the new var-directory?
That's what we do. Someday, there should be some software sitting around to make this cleaner. Jim -- Jim Fulton mailto:jim@digicool.com Technical Director (888) 344-4332 Python Powered! Digital Creations http://www.digicool.com http://www.python.org Under US Code Title 47, Sec.227(b)(1)(C), Sec.227(a)(2)(B) This email address may not be added to any commercial mail list with out my permission. Violation of my privacy with advertising or SPAM will result in a suit for a MINIMUM of $500 damages/incident, $1500 for repeats.
Jim Fulton wrote:
Magnus Lie Hetland wrote:
How do you upgrade zope without affecting your current database? Just copy it into the new var-directory?
That's what we do. Someday, there should be some software sitting around to make this cleaner.
What I do is keep the data in a directory outside the distribution, rather than using the supplied directory. That way, I can pkg_delete the old version and pkg_add the new one, and I don't need to do anything special. This also makes it easy to have multiple instances of zope. The zope-install script from the NetBSD zope pkg may be useful. It creates instances, the pcgi resource file, and generates sample Apache rewrite rules: #!/usr/pkg/bin/python # # $NetBSD: zope-install.py,v 1.1.1.1 1998/12/12 17:28:23 tsarna Exp $ # # Copyright (c) 1998 Endicor Technologies, Inc. # All rights reserved. Written by Ty Sarna <tsarna@endicor.com> # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # This will have to do for now... import sys, os, re, getopt, string prefix = "/usr/pkg" cgidir = prefix + "/libexec/cgi-bin" apconf = prefix + "/etc/httpd/httpd.conf" zopedir = prefix + "/zope" zopevar = zopedir + "/var" zopedata = "/var/zope" def usage(): print 'usage: zope-install [-n] [-p perms] [-u user] [-g group] [-d dir] [-c cgidir] instancename' print print '\t-n\tshow what would be done, but don\'t actually do it' print '\t-p\tmanager permissions, in the form' print '\t\tusername:plaintextpassword[:domain-restrinction]' print '\t\teg: "root:mypass" or "root:mypass:*.mydomain.com' print '\t-u\tusername to run as, default to Apache\'s user' print '\t-g\tgroupname to run as, default to Apache\'s group' print '\t-d\tdirectory for instance, defaults to %s/instancename' % zopedata print '\t-d\tdirectory for CGIs, defaults to %s' % cgidir sys.exit(1) def exists(f): e = 1 try: os.stat(f) except: e = 0 return e def resourcefile(v): resource = '''#!%(zopedir)s/pcgi/pcgi-wrapper PCGI_NAME=Main PCGI_MODULE_PATH=%(zopedir)s/lib/python/Main.py PCGI_PUBLISHER=%(zopedir)s/pcgi/pcgi_publisher.py PCGI_EXE=%(python)s PCGI_SOCKET_FILE=%(instvar)s/pcgi.soc PCGI_PID_FILE=%(instvar)s/pcgi.pid PCGI_ERROR_LOG=%(instvar)s/pcgi.log PCGI_DISPLAY_ERRORS=1 BOBO_REALM=%(instance)s BOBO_DEBUG_MODE=1 INSTANCE_HOME=%(dirname)s ''' % v return resource def GetApachePerms(): user = group = "?ERROR?" rx = re.compile("^(User|Group)\\s([^\\s]+)") f = open(apconf, "r") for l in f.readlines(): m = rx.match(l) if m: if m.group(1) == "User": user = m.group(2) if m.group(1) == "Group": group = m.group(2) return user, group def runsys(pretend, cmd): if pretend: print cmd else: r = os.system(cmd) if r: sys.exit(r) def createfile(pretend, fname, contents): if pretend: print "cat >%(fname)s <__EOF__\n%(contents)s__EOF__" % vars() else: f = open(fname, "w") f.write(contents) f.close() if __name__ == "__main__": optlist, args = getopt.getopt(sys.argv[1:], 'np:u:g:d:') if len(args) != 1: usage() instance = args[0] user, group = GetApachePerms() pretend = 0 seenperms = 0 perms = "root:password" dirname = None python = sys.executable for (oname, oarg) in optlist: if oname == '-n': pretend = 1 elif oname == '-p': perms = oarg seenperms = 1 elif oname == '-u': user = oarg elif oname == '-g': group = oarg elif oname == '-d': dirname = oarg elif oname == '-c': cgidir = oarg if not dirname: dirname = zopedata + '/' + instance instvar = dirname + '/var' runsys(pretend, "mkdir -p " + instvar) if not exists(instvar + "/Data.bbb"): runsys(pretend, "cp %(zopevar)s/Data.bbb.in %(instvar)s" % vars()) runsys(pretend, "chown -R %(user)s.%(group)s %(dirname)s" % vars()) runsys(pretend, "chmod -R u+rwX,g+rX,g-w,o-rwx %(dirname)s" % vars()) fname = dirname + "/access" if not exists(fname): if not seenperms: sys.stderr.write("%s: warning: perms not set, dedaulting to %s\n" % (sys.argv[0], perms)) createfile(pretend, fname, perms + '\n') runsys(pretend, "chmod 600 %(fname)s; chown %(user)s.%(group)s %(fname)s" % vars()) fname = cgidir + '/' + instance + ".cgi" createfile(pretend, fname, resourcefile(vars())) runsys(pretend, "chmod 755 %(fname)s; chown %(user)s.%(group)s %(fname)s" % vars()) sys.stderr.write(""" now you will need to add lines similar to these to your Apache srm.conf file to enable access to your instance via http://yourwebserver/instance/ RewriteEngine on RewriteCond %%{HTTP:Authorization} ^(.*) RewriteRule ^/%(instance)s/(.*) %(cgidir)s/%(instance)s.cgi/$1 [e=HTTP_CGI_AUTHORIZATION:%%1,t=application/x-httpd-cgi,l] """ % vars())
On Fri, 18 Dec 1998, Jim Fulton wrote:
Magnus Lie Hetland wrote:
How do you upgrade zope without affecting your current database? Just copy it into the new var-directory?
That's what we do. Someday, there should be some software sitting around to make this cleaner.
Well -- in my opinion this is pretty clean. If everything I'v done is in the var-dir (except my extensions end products... Okay, maybe it's not *that* clean after all...) then it's quite simple...
Jim
-- Magnus Lie Hetland www.pvv.org/arcadia <arcadia@pvv.org>
As well as 'var', you might also want to copy any files in ZopeRoot/Extensions (if you've added external methods) and ZopeRoot/lib/python/Products (if you've added Products). I've been happily copying the contents of the var directory into each new zope release without a hitch! I've also been copying the var directory onto a laptop, taking it home and working on it there, taking it back again, etc. etc for a few months now with no problems. Cheers, Andy.
-----Original Message----- From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of Magnus Lie Hetland Sent: Friday, December 18, 1998 11:23 AM To: zope@zope.org Subject: [Zope] - Upgrading...
How do you upgrade zope without affecting your current database? Just copy it into the new var-directory?
--
Magnus Lie Hetland www.pvv.org/arcadia <arcadia@pvv.org>
participants (4)
-
Andy Smith -
Jim Fulton -
Magnus Lie Hetland -
Ty Sarna