= Django with Apache 1.3 and FastCGI on Mac OS X using Python 2.4 = **Note: See [http://www.djangoproject.com/documentation/fastcgi/ How to use Django with FastCGI] for an updated version of this documentation.** If you want to use django with mod_python on OS X, you need to install Apache2 first. This involves quite a bit of extra effort and can be difficult to get right. But since Apache 1.3 comes already installed on all OS X systems, for most Mac users, this won't be the best option. The alternative to mod_python and Apache2 is to use FCGI with Apache 1.3, but with the information provided here [http://hugo.muensterland.org/2005/08/03/django-apache-and-fcgi/ Django, Apache and FCGI] and here [https://simon.bofh.ms/cgi-bin/trac-django-projects.cgi/wiki/DjangoFcgi django projects] it isn't quite so simple to get going either. Hence a quick summary of the steps needed to get Django working with FCGI and Apache 1.3 on Mac OS X. It assumes that your django project is called ''myproject''. Adjust the following accordingly. === check that you can have Django running correctly === Check that you can run Django. {{{ python manage.py runserver }}} or if you have Python2.4 installed: {{{ python2.4 manage.py runserver }}} Before you start preparing fcgi you should check that you can run at least the development server. This will show you any DB not installed errors, etc. And saves some time. Kill it using CTRL-C (yes, CTRL even on MAC OSX, you are in Terminal, right?). === install django-fcgi.py === Get the ''django-fcgi.py'' script and put it in ''/usr/local/bin''. {{{ svn co https://simon.bofh.ms/django-projects/stuff stuff chmod a+x stuff/trunk/bin/django-fcgi.py sudo mv stuff/trunk/bin/django-fcgi.py /usr/local/bin rm -rf stuff }}} django-fcgi.py currently is setup to work with python 2.3 (the default installed on Mac OS X 10.3 and 10.4). When using it with python 2.3 it requires a package called python-eunuchs to provide 'socketpair'. I couldn't get this to compile. However, 'socketpair' is supplied with python 2.4. To use django-fcgi.py with python 2.4 you need to change the shebang at the top of the file to point at python 2.4. YMMV ? Can anyone get this python-eunuchs working on Python 2.3 ? / radek === install mod_fastcgi === {{{ curl -O http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz tar xvfz mod_fastcgi-2.4.2.tar.gz cd mod_fastcgi-2.4.2 /usr/sbin/apxs -o mod_fastcgi.so -c *.c sudo /usr/sbin/apxs -i -a -n fastcgi mod_fastcgi.so cd ..; rm -rf mod_fastcgi-2.4.2* }}} === install latest flup === {{{ svn co http://svn.saddi.com/flup/trunk flup cd flup/ sudo python setup.py install cd ..; sudo rm -rf flup }}} === change /etc/hosts and /etc/httpd/httpd.conf === Use your favorite editor to change ''/etc/hosts'', adding a 'django.loc' alias for localhost. This is useful for development. {{{ localhost django.loc }}} Now, add the following lines at the end of ''httpd.conf'': {{{ FastCgiExternalServer /Library/WebServer/Documents/django.fcgi -host Servername django.loc ErrorLog /var/log/httpd/django-error.log CustomLog /var/log/httpd/django-access.log combined DocumentRoot /Library/WebServer/Documents/ RewriteEngine On RewriteRule ^(/m/.*)$ $1 [L] # for custom media RewriteRule ^(/media.*)$ $1 [L] # for admin media RewriteRule ^(/.*\.)(jpg|gif|png|ico)$ $1$2 [L] # some other media (mostly "accidentaly" in the root) RewriteRule ^(/admin.*)$ /django.fcgi$1 [L] # admin application RewriteRule ^(/myapp.*)$ /django.fcgi$1 [L] # your own application RewriteRule ^(/.*)$ /django.fcgi$1 [L] # the rest of django (only if needed from the web root) }}} You'll need such a RewriteRule line for every application you want to access (if your application name is something else than ''myapp'', make sure to change that above). Finally, give apache a restart with 'sudo apachectl restart' to make these changes effective. === link media files into docroot === This will make the django admin templates and style sheets available to Apache. First, change into your ''django_src'' directory. And then: {{{ ln -s `pwd`/django/contrib/admin/media /Library/WebServer/Documents/media }}} Now, change into your django project root (i.e. the directory that contains ''myproject''), and link that into site-packages {{{ sudo ln -s `pwd`/myproject /Library/Python/2.3/site-packages/myproject }}} Basically, ''import myproject'' should work now on the python prompt. === starting and stopping === Use the following commands to start and stop the fcgi server: {{{ start: django-fcgi.py --settings=myproject.settings --host --port 8882 --daemon stop: kill `ps auxww | grep [d]jango-fcgi | awk '{print $2}'` }}} Note that the port-number in the call to django-fcgi.py has to match the number that you specified in ''/etc/httpd/httpd.conf'' above. Also, the settings file argument must refer to your project settings (here: ''myproject''). === finished! === With both Apache and django-fcgi.py running, you should now be able to access the django admin application at [http://django.loc/admin http://django.loc/admin]. Enjoy.