On Apr 28, 2008, at 8:00 PM, Martin Aspeli wrote:
...
I'm trying to deploy a Repoze-based application via mod_wsgi. I'm building Repoze in a buildout. The problem is that I need to get mod_wsgi to execute the WSGI script with buildout's working set of eggs.

The mod_wsgi configuration looks like this:

WSGIDaemonProcess tmp threads=1 processes=4 maximum- requests=10000 python-path=/usr/lib/python2.4/site-packages

     <VirtualHost *:80>
       ServerName my.machine.local
       WSGIScriptAlias / /path/to/bin/zope2.wsgi
       WSGIProcessGroup tmp
       WSGIPassAuthorization On
     </VirtualHost>


Now, this says to create a process pool of Python processes with the given python-path. This is really geared towards the virtualenv use case, where you'd have a custom virtualenv python-path for each project.

In the case of buildout, however, the pythonpath is explicitly for console scripts by munging console scripts and doing sys.path manipulation.

This is imprecise at best. Buildout, like easy_install, generate console scripts. They do so with different assumptions. Easy_install makes the assumption that eggs are in the Python path, typically in site-packages, wheres buildout doesn't.

Unfortunately, zope2.wsgi is not a console script, it's just a script that contains:

 from paste.deploy import loadapp

 ini = '/path/to/pasteconfig.ini'
 application = loadapp('config:%s' % ini)

The key here is that this is a script that needs to define a global variable 'application'.

Interesting. So is it execfiled? Imported?


The only way I can make this work, is to paste a block of sys.path manipulation from a console script that buildout has had the opportunity to munge, but that's not exactly a stable solution.


I can see the following possible solutions:

1) Make a buildout recipe that creates a directory with a .pth file for all the eggs in the working set. This would then be able to serve as a python-path above.

Nah


2) Make a buildout recipe that generates the zope2.wsgi script as above, but also generates the sys.path munging.

Yes, that's the right solution.

This should be straightforward. All you really need is the working_set that you can get from calling documented APIs in the zc.buildout.easy_install module. Then you can iterate over that getting the distribution locations to add to the front of sys.path.

Does one of these exist already? Is there a better way?

2 is the better way.

Jim

--
Jim Fulton
Zope Corporation


_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to