Python on Django on WSGI on Apache on XAMPP on OSX Snow Leopard on Monday
As it turns out it was not that hard once I dropped the fuss and added the "easy" keyword to my googling for way to tame the critter.
This time I really found a walkthrough that was right all the way. You can check it here.
The main idea is that you have to compile a Python module for your XAMPP Apache and that's covered in the article pretty well.
Then you have to add the
AddModule wsgi_module modules/mod_wsgi.so
in the httpd.conf and the WSGIScriptAlias directive in your vhost.
At this point you should be able to go to your myvhost.tld in the browser and have the simple hello world wsgi script running.
Next I needed to get Django running. As I am using the PyDev Eclipse plugin when I created a new Django project "DjangoSandbox" I got the initial files created for me. This would be the equivalent of manually running
django-admin.py startproject DjangoSandbox
Now getting Django to run in Apache is a matter of who gives up first. Basically if you search for answers online you ll backtrack from Django's "howto WSGI" to WSGI's "how to Django" to WSGI's creator "An improved WSGI script for use with Django". I do recommend you read all that. It's stuff you should know. But the bottom line is Django had a dev server built in and although it makes dev really easy to get into it's troublesome when you move the code to production. That happens because production code will run on mod_wsgi, entirely different beast from the dev server.
At this point I have Django running in a vhost using the django.wsgi script from Graham Dumpleton. I had to compile the MySQL extension and also add
VERSIONER_PYTHON_PREFER_32_BIT=yes
DocumentRoot "/Users/cosmin.cimpoi/Work/Projects/DjangoSandbox/work/code/www/httpdocs/webroot" ServerName djangosandbox.tld ErrorLog "logs/djangosandbox.tld-error_log" CustomLog "logs/djangosandbox.tld-access_log" common WSGIDaemonProcess djangosandbox.tld threads=15 user=cosmin.cimpoi group=staff WSGIProcessGroup djangosandbox.tld WSGIScriptAlias / "/Users/cosmin.cimpoi/Work/Projects/DjangoSandbox/work/code/www/httpdocs/webroot/django.wsgi" Alias /media/ /Library/Python/2.6/site-packages/django/contrib/admin/media/ AllowOverride All Options Indexes FollowSymLinks Order deny,allow Allow from all
import sys appParentPath = '/Users/cosmin.cimpoi/Work/Projects/DjangoSandbox/work/code/www/httpdocs/src' appPath = '/Users/cosmin.cimpoi/Work/Projects/DjangoSandbox/work/code/www/httpdocs/src/DjangoSandbox' if appParentPath not in sys.path: sys.path.append(appParentPath) if appPath not in sys.path: sys.path.append(appPath) import settings import django.core.management django.core.management.setup_environ(settings) utility = django.core.management.ManagementUtility() command = utility.fetch_command('runserver') command.validate() import django.conf import django.utils django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE) import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()
So far the result in browser is great. I get a big fat It worked! :-)
Also I got South running just because migrations was one of the main things that what got me interested in Django in the first place.
So far Python + Django looks promising. Different from my fav combo of PHP + CakePHP. Good different and bad different. Bad because it's a such hassle to get it running and good because it loks and feels more polished and proper. I suspect that having it in production will be an even bigger hassle but I really think in the end it's well worth the effort. I definitely want to finish the sample Django app and move forward from there. In case I get into trouble I'll post about it as always :-)
0 Comments:
Post a Comment
<< Home