I know it's mentioned in the docs, but (after 3 days of research) I
though I'd post this here for the benefit of anyone else facing the
same issue since, searching the mail archive, I found the exact error
only here, and needed to make a decision about which way forward to
take:
http://groups.google.com/group/modwsgi/browse_thread/thread/42de104289d6b26f

My local staging setup (for testing Django with mod_wsgi before
deployment - mod_wsgi is already running happily on our Debian server,
although not yet with Django):

OS X 10.5.8 (MacBook Intel Core 2 Duo)
Apache 2.2.14 (was Intel 64 bit, now 32 bit - see below)
mod_wsgi 3.3
Python 2.6.4 (32 bit from http://www.python.org/download/releases/2.6.5/)

I'd already decided to go 32 bit to run MySQL-python with Django under
the 32-bit Python 2.6 OS X package:
http://stackoverflow.com/questions/1969222/mysql-python-1-2-3-and-os-x-10-5-64-or-32-bit

BTW activity Monitor shows that the *only* other process running as
Intel 64 bit apart from httpd is Growl!

However, as from Python 2.7 the OS X installer is 64 bit:
http://bugs.python.org/issue9045

but since many Python modules aren't yet 64 bit, it seems simpler to
stay on 32 bit until they've caught up, and/or I upgrade to OS X 10.6
(Snow Leopard). Unless anyone has better advice?

#####
Here's the journey:

Having installed mod_wsgi 3.3 and noted the following warnings:

ld warning: in /Library/Frameworks/Python.framework/Python, missing
required architecture ppc64 in file
ld warning: in /Library/Frameworks/Python.framework/Python, missing
required architecture x86_64 in file

but (not heeding that 'warnings are errors') I added the module to
httpd.config anyway and got:

$ apachectl configtest
httpd: Syntax error on line 115 of /private/etc/apache2/httpd.conf:
Cannot load /usr/libexec/apache2/mod_wsgi.so into server: dlopen(/usr/
libexec/apache2/mod_wsgi.so, 10): Symbol not found: _PyExc_RuntimeError
\n  Referenced from: /usr/libexec/apache2/mod_wsgi.so\n  Expected in:
dynamic lookup\n

Having read all the relevant docs and checked the LDFLAGS in
configure.ac and the Makefile - both now read as suggested in the old
post to this group - (and spent 2 days looking for similar errors and
opinions) I came to the conclusion that the problem was with Apache2
running as 64-bit, with a 32-bit Python 2.6.

Following the mod_wsgi docs I got readouts from 'otool' and 'file':

$ otool -L mod_wsgi.so
mod_wsgi.so:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 111.1.5)
  /Library/Frameworks/Python.framework/Versions/2.6/Python
(compatibility version 2.6.0, current version 2.6.0)
  /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
version 1.0.0)

- no problem.

$ file /usr/libexec/apache2/mod_wsgi.so
/usr/libexec/apache2/mod_wsgi.so: Mach-O universal binary with 4
architectures
/usr/libexec/apache2/mod_wsgi.so (for architecture ppc7400):    Mach-O
bundle ppc
/usr/libexec/apache2/mod_wsgi.so (for architecture ppc64):      Mach-O 64-
bit bundle ppc64
/usr/libexec/apache2/mod_wsgi.so (for architecture i386):       Mach-O
bundle i386
/usr/libexec/apache2/mod_wsgi.so (for architecture x86_64):     Mach-O 64-
bit bundle x86_64

- fine, just like all the other Apache2 modules.

$ file /usr/sbin/httpd
/usr/sbin/httpd: Mach-O universal binary with 4 architectures
/usr/sbin/httpd (for architecture ppc7400):     Mach-O executable ppc
/usr/sbin/httpd (for architecture ppc64):       Mach-O 64-bit executable
ppc64
/usr/sbin/httpd (for architecture i386):        Mach-O executable i386
/usr/sbin/httpd (for architecture x86_64):      Mach-O 64-bit executable
x86_64

- hmmm... check in Activity Monitor, Apache is listed as 'Intel (64
bit)', although it can obviously run 32 bit.

$ file /Library/Frameworks/Python.framework/Versions/2.6/bin/python
/Library/Frameworks/Python.framework/Versions/2.6/bin/python: Mach-O
universal binary with 2 architectures
/Library/Frameworks/Python.framework/Versions/2.6/bin/python (for
architecture ppc):      Mach-O executable ppc
/Library/Frameworks/Python.framework/Versions/2.6/bin/python (for
architecture i386):     Mach-O executable i386

- which shows that my Python 2.6 install is 32 bit and *cannot* run as
64 bit.

So following advice in the docs I decided to make Apache also run 32-
bit, adapting the (similar to Graham's) instructions for Intel from
here:
http://codesnippets.joyent.com/posts/show/1328

sudo mv /usr/sbin/httpd /usr/sbin/httpd.ub
sudo lipo -thin i386 /usr/sbin/httpd.ub -output /usr/sbin/httpd.i386
sudo ln -s /usr/sbin/httpd.i386 /usr/sbin/httpd

$ apachectl configtest
Syntax OK

To restore Apache to 64 bit mode, just type:
sudo mv /usr/sbin/httpd.ub /usr/sbin/httpd

...and watch out for OS X system updates that might overwrite httpd.

I hope that helps anyone else in the same boat, and explains this
particular issue in detail.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/modwsgi?hl=en.

Reply via email to