<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Just-Another.Net blog posts</title><link>http://just-another.net/</link><description /><language>en-us</language><lastBuildDate>Sun, 12 Jul 2009 04:29:48 -0000</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Just-anothernetBlogPosts" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>PyOhio 2009: Call for Proposals
</title><link>http://feedproxy.google.com/~r/Just-anothernetBlogPosts/~3/860OuIPMc70/</link><description>&lt;p&gt;&lt;a href="http://wiki.python.org/moin/PyOhio/CallForProposals"&gt;PyOhio 2009: Call for&amp;nbsp;Proposals&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;PyOhio 2009, the second annual Python programming mini-conference for Ohio and surrounding areas, will take place Saturday-Sunday, July 25-26, 2009 at the Ohio State University in Columbus, Ohio. A variety of activities are planned, including tutorials, scheduled talks, Lightning Talks, and Open&amp;nbsp;Spaces.
&lt;/p&gt;
&lt;p&gt;PyOhio invites all interested people to submit proposals for scheduled talks and tutorials. PyOhio will accept abstracts on any topics of interest to Python&amp;nbsp;programmers.
&lt;/p&gt;
&lt;p&gt;Standard presentations are expected to last 40 minutes with a 10 minute question-and-answer period. Other talk formats will also be considered, however; please indicate your preferred format in your proposal. Hands-on tutorial sessions are also welcomed. Tutorial instructors should indicate the expected&amp;nbsp;length
&lt;/p&gt;
&lt;p&gt;PyOhio is especially interested in hosting a Beginners&amp;#8217; Track for those new to Python or new to programming in general. If your proposal would be suitable for inclusion in the Beginners&amp;#8217; Track, please indicate so. Organizers will work with speakers and instructors in the Beginners&amp;#8217; Track to help them coordinate their talks/tutorials into a smooth, coherent learning curve for new Python&amp;nbsp;users.
&lt;/p&gt;
&lt;p&gt;All proposals should include abstracts no longer than 500 words in length. Abstracts must include the title, summary of the presentation, the expertise level targeted, and a brief description of the area of Python programming it relates&amp;nbsp;to.
&lt;/p&gt;
&lt;p&gt;All proposals should be emailed to cfp@pyohio.org for review. Please submit proposals by May 15, 2009. Accepted speakers will be notified by June&amp;nbsp;1.
&lt;/p&gt;
&lt;p&gt;You can read more about the conference at &lt;a href="http://pyohio.org"&gt;http://pyohio.org&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;If you have questions about proposals, please email cfp@pyohio.org. You can also contact the PyOhio organizers at&amp;nbsp;pyohio-organizers@python.org.
&lt;/p&gt;
</description><guid isPermaLink="false">http://just-another.net/2009/04/09/pyohio-2009-call-proposals/</guid><category>python</category><category>pyohio</category><category>conference</category><category>awesome</category><feedburner:origLink>http://just-another.net/2009/04/09/pyohio-2009-call-proposals/</feedburner:origLink></item><item><title>Python STOMP Implementation
</title><link>http://feedproxy.google.com/~r/Just-anothernetBlogPosts/~3/xqOagW2fAeo/</link><description>&lt;p&gt;Everyone else is doing it!&lt;br /&gt;

&lt;/p&gt;
&lt;p&gt;Quite seriously though&amp;#8230;  In my dealings with &lt;span class="caps"&gt;JMS&lt;/span&gt; Message Queuing, specifically with &lt;a href="http://activemq.apache.org/"&gt;ActiveMQ&lt;/a&gt;, I felt the lack of a simple, straight-forward and easy to use Python implementation of the protocol that was also well documented and hackable.&lt;br /&gt;

&lt;/p&gt;
&lt;p&gt;More often than not, I found myself using Perl&amp;#8217;s &lt;a href="http://search.cpan.org/dist/Net-Stomp/"&gt;Net::Stomp&lt;/a&gt; module because it was so much quicker to get going.  &lt;strong&gt;Gasp&lt;/strong&gt; you say, a &lt;em&gt;Perl&lt;/em&gt; module that is easier to use than a &lt;em&gt;Python&lt;/em&gt; module?!  &lt;span class="caps"&gt;BLASPHEMY&lt;/span&gt;!  I implore you to believe&amp;nbsp;me!
&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t think I&amp;#8217;ve reinvented the wheel, merely rounded it to my specifications.  So, if you choose, check out my implementation of &lt;span class="caps"&gt;STOMP&lt;/span&gt; in Python over at Bitbucket: &lt;a href="http://bitbucket.org/benjaminws/python-stomp/"&gt;python-stomp&lt;/a&gt;.&lt;br /&gt;

&lt;/p&gt;
&lt;p&gt;It is feature-complete according to the &lt;a href="http://stomp.codehaus.org/Protocol"&gt;&lt;span class="caps"&gt;STOMP&lt;/span&gt; Protocol&lt;/a&gt;, 100% Unit test covered, documented, comes with example usage and is simple to&amp;nbsp;use.
&lt;/p&gt;
&lt;p&gt;Feedback is appreciated in the form of issues on the &lt;a href="http://bitbucket.org/benjaminws/python-stomp/issues/"&gt;Bitbucket issue tracker&lt;/a&gt; or this blog if you want to say something nice, or mean about&amp;nbsp;it!
&lt;/p&gt;
&lt;p&gt;Documentation: 
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     &lt;a href="http://just-another.net/docs/frame.html"&gt;Frame&lt;/a&gt;
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://just-another.net/docs/stomp.html"&gt;Stomp&lt;/a&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Code:
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     &lt;a href="http://bitbucket.org/benjaminws/python-stomp/src/"&gt;Code&lt;/a&gt;
 &lt;/li&gt;
&lt;/ul&gt;
</description><guid isPermaLink="false">http://just-another.net/2009/04/03/python-stomp-implementation/</guid><category>python</category><category>stomp</category><category>activemq</category><category>etc</category><feedburner:origLink>http://just-another.net/2009/04/03/python-stomp-implementation/</feedburner:origLink></item><item><title>Psyched for Pycon 2009
</title><link>http://feedproxy.google.com/~r/Just-anothernetBlogPosts/~3/7tQR8qPFtA8/</link><description>&lt;p&gt;I&amp;#8217;m jazzed to be heading to Chicago again this year for &lt;a href="http://us.pycon.org/2009/"&gt;pycon&lt;/a&gt;.  Last year I had a blast and learned a lot.  I even got to apply some of what I learned in practice at work and on personal projects!  I&amp;#8217;m hoping that I&amp;#8217;ll take away as much value from the conference this year.  A quick look at the &lt;a href="http://us.pycon.org/2009/conference/talks/"&gt;talks&lt;/a&gt; suggest that won&amp;#8217;t be a&amp;nbsp;problem.
&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m going to try to blog while I&amp;#8217;m there, but most likely you&amp;#8217;ll get more out of me via &lt;a href="http://twitter.com/"&gt;twitter&lt;/a&gt;, so why not &lt;a href="http://twitter.com/benjaminws"&gt;follow me&lt;/a&gt; there?
&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the list of talks I &lt;em&gt;really&lt;/em&gt; want to&amp;nbsp;attend:
&lt;/p&gt;
&lt;p&gt;There is no order here, scheduling is the tricky&amp;nbsp;part..
&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/6/"&gt;How to Give a Python Talk&lt;/a&gt; &amp;mdash; Mr. Andrew M&amp;nbsp;Kuchling
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/82/"&gt;Paver: easy build and deployment automation for Python projects&lt;/a&gt; &amp;mdash; Kevin&amp;nbsp;Dangoor
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/30/"&gt;Building tests for large, untested codebases&lt;/a&gt; &amp;mdash; Dr. C. Titus&amp;nbsp;Brown
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/26/"&gt;Coverage testing, the good and the bad&lt;/a&gt; &amp;mdash; Ned&amp;nbsp;Batchelder 
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/24/"&gt;Designing Applications with Non-Relational Databases&lt;/a&gt; &amp;mdash; Ben&amp;nbsp;Bangert 
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/49/"&gt;Pinax: a platform for rapidly developing websites&lt;/a&gt; &amp;mdash; James&amp;nbsp;Tauber
 &lt;/li&gt;

 &lt;li&gt;
     &lt;a href="http://us.pycon.org/2009/conference/schedule/event/88/"&gt;Panel: Functional Testing Tools in Python&lt;/a&gt; &amp;mdash; Panel, multiple&amp;nbsp;folks.
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;#8217;s more, but those are the ones that stuck out to me..  Don&amp;#8217;t think I&amp;#8217;m in too much danger of missing anything this&amp;nbsp;year.
&lt;/p&gt;
&lt;p&gt;A few of us at &lt;a href="http://aginteractive.com"&gt;&lt;span class="caps"&gt;AG&lt;/span&gt; Interactive&lt;/a&gt; are planning a night of getting together for what we&amp;#8217;re dubbing as #pyconbeer on twitter, so keep a search up: &lt;a href="http://search.twitter.com/search?q=%23pyconbeer"&gt;Twitter #pyconbeer&lt;/a&gt; I&amp;#8217;m thinking we&amp;#8217;re going to shoot for Friday evening, the&amp;nbsp;27th.
&lt;/p&gt;
&lt;p&gt;Hope to see many of you there and put names to&amp;nbsp;faces!
&lt;/p&gt;
&lt;p&gt;&lt;img src="http://us.pycon.org/media/2009/public/pycon2009-horizontal-smaller-100x64.png" alt="Pycon 2009"/&gt;
&lt;/p&gt;
</description><guid isPermaLink="false">http://just-another.net/2009/03/25/psyched-pycon-2009/</guid><category>python</category><category>pycon</category><feedburner:origLink>http://just-another.net/2009/03/25/psyched-pycon-2009/</feedburner:origLink></item><item><title>Django debug toolbar FTW.
</title><link>http://feedproxy.google.com/~r/Just-anothernetBlogPosts/~3/LAtth4x9Aqo/</link><description>&lt;p&gt;If you do any development with &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, then this is a must have.&lt;br /&gt;

&lt;/p&gt;
&lt;p&gt;Not only is it awesomely useful, but it also has a great abbreviation that could be a throwback to &lt;span class="caps"&gt;WWF&lt;/span&gt; days of old.  Any child of the mid-to-late 80&amp;#8217;s remember the &lt;a href="http://is.gd/hPag"&gt;&lt;span class="caps"&gt;DDT&lt;/span&gt;&lt;/a&gt;?!  That&amp;#8217;s kind of what this is does, help you drive problems with your app head first into the mat -&amp;nbsp;nice.
&lt;/p&gt;
&lt;p&gt;Google code page here: &lt;a href="http://code.google.com/p/django-debug-toolbar/"&gt;&lt;span class="caps"&gt;DDT&lt;/span&gt; on google&amp;nbsp;code&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Github here: &lt;a href="http://github.com/robhudson/django-debug-toolbar/commits/master/"&gt;&lt;span class="caps"&gt;DDT&lt;/span&gt; on&amp;nbsp;github&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Like any other python package, this one is simple to&amp;nbsp;install.
&lt;/p&gt;
&lt;p&gt;Get a tarball, unpack it, cd into&amp;nbsp;it..
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# python setup.py build
# sudo python setup.py install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, use it in your django app by adding something similar to your&amp;nbsp;settings.py:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# This should be appended to MIDDLEWARE_CLASSES:
'debug_toolbar.middleware.DebugToolbarMiddleware',

# This should be appended to INSTALLED_APPS:
'debug_toolbar',

# Set this to localhost if developing locally
# If not developing locally, add your remote IP..
INTERNAL_IPS = ('127.0.0.1')

# Various apps available
DEBUG_TOOLBAR_PANELS = (
    'debug_toolbar.panels.version.VersionDebugPanel',
    'debug_toolbar.panels.timer.TimerDebugPanel',
    'debug_toolbar.panels.headers.HeaderDebugPanel',
    'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
    'debug_toolbar.panels.sql.SQLDebugPanel',
    'debug_toolbar.panels.cache.CacheDebugPanel',
    'debug_toolbar.panels.logger.LoggingPanel',
)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;See here: &lt;a href="http://github.com/robhudson/django-debug-toolbar/blob/master/README.rst"&gt;&lt;span class="caps"&gt;README&lt;/span&gt;&lt;/a&gt; for more detail on&amp;nbsp;usage/install.
&lt;/p&gt;
&lt;p&gt;Get it, use it, love&amp;nbsp;it.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;EDIT&lt;/span&gt;:&lt;/strong&gt; &lt;em&gt;Added some quick bits on how to&amp;nbsp;install/use&lt;/em&gt;
&lt;/p&gt;
</description><guid isPermaLink="false">http://just-another.net/2009/01/30/django-debug-toolbar-ftw/</guid><category>django</category><category>python</category><category>toolbar</category><category>debug</category><feedburner:origLink>http://just-another.net/2009/01/30/django-debug-toolbar-ftw/</feedburner:origLink></item><item><title>byteflow/django+supervisord+nginx = WIN
</title><link>http://feedproxy.google.com/~r/Just-anothernetBlogPosts/~3/Uflrrvul6c0/</link><description>&lt;p&gt;Recently I made the final step in converting my website over to &lt;a href="http://nginx.net"&gt;nginx&lt;/a&gt;.  I decided to manage my &lt;a href="http://www.djangoproject.com/"&gt;django&lt;/a&gt; application, &lt;a href="http://byteflow.su/"&gt;byteflow&lt;/a&gt;, with &lt;a href="http://supervisord.org/"&gt;supervisor&lt;/a&gt;.  I have had &lt;strong&gt;great&lt;/strong&gt; success with this over at &lt;a href="http://www.aginteractive.com"&gt;&lt;span class="caps"&gt;AGI&lt;/span&gt;&lt;/a&gt; and thought I should advocate the success I&amp;#8217;ve had to the public by extending it to my own&amp;nbsp;site.
&lt;/p&gt;
&lt;p&gt;I first heard about supervisor at &lt;a href="http://www.python.org/community/pycon/"&gt;pycon&lt;/a&gt; last year and thought it could be useful in many ways, especially at the office.  In a nutshell, supervisor &amp;#8216;supervises&amp;#8217; processes, and allows you to manage them with a simple interface, but I&amp;#8217;ll go into more detail about it later.  Around the same time that I discovered supervisor I had also started experimenting with nginx and fastcgi to run my blog.  I ended up going with &lt;a href="http://www.lighttpd.net/"&gt;lighty&lt;/a&gt; and fastcgi instead, however, mainly due to familiarity.  Things change, and so do my opinions on technology.  Nginx sold me on it&amp;#8217;s performance and simplistic configuration, plain and simple.  So now, here&amp;#8217;s the meat and&amp;nbsp;potatoes.
&lt;/p&gt;
&lt;p&gt;To break it down, here is what we&amp;#8217;re looking&amp;nbsp;at.
&lt;/p&gt;
&lt;p&gt;&lt;span class="caps"&gt;INTARWEBS&lt;/span&gt; -&amp;gt; nginx -&amp;gt; fastcgi -&amp;gt; django/byteflow(managed by&amp;nbsp;supervisor)
&lt;/p&gt;
&lt;p&gt;Everything below assumes you have installed nginx, django, byteflow and&amp;nbsp;supervisor.
&lt;/p&gt;
&lt;p&gt;So how about a look at the actual&amp;nbsp;setup.
&lt;/p&gt;
&lt;p&gt;First, let&amp;#8217;s take a look at the code to fire up the django app.  I&amp;#8217;ve dubbed it runserver.py and put it in my byteflow code&amp;nbsp;tree.
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python
if __name__ == '__main__':
    from flup.server.fcgi_fork import WSGIServer
    from django.core.handlers.wsgi import WSGIHandler
    WSGIServer(WSGIHandler()).run()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This keeps the django devs happy by not relying on manage.py to keep up with the server&amp;nbsp;stuffs.
&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s pretty simple..  Starts up flups&amp;#8217; WSGIServer and uses django&amp;#8217;s WSGIHandler to do the dirty work.  Not much to it,&amp;nbsp;really.
&lt;/p&gt;
&lt;p&gt;Now, lets take a look at the supervisor setup.  You can get a lot of what you need by&amp;nbsp;running:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# sudo echo_supervisord_conf &amp;gt; /etc/supervisord.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That sets up a basic (but verbose!) supervisor config.  I&amp;#8217;ve trimmed it down to&amp;nbsp;this:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)
user=nobody                 ; (default is current user, required if root)
childlogdir=/var/log/supervisord/            ; ('AUTO' child log dir, default $TEMP)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

; Production setup
[fcgi-program:django_fcgi]
socket=tcp://127.0.0.1:8080  ; We reference this later in nginx
command = /home/bsmith/Dev/byteflow/runserver.py  ; Calls the above code
environment=PYTHONPATH=/home/bsmith/Dev/byteflow  ; Setup needed environment
environment=DJANGO_SETTINGS_MODULE=settings

; Development setup
[fcgi-program:django_dev_fcgi]
socket=tcp://127.0.0.1:8081
command = /home/bsmith/Dev/byteflow_new/runserver.py
environment=PYTHONPATH=/home/bsmith/Dev/byteflow_new
environment=DJANGO_SETTINGS_MODULE=settings
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Simple enough, eh?  Comments in the configuration should explain what&amp;#8217;s going&amp;nbsp;on.
&lt;/p&gt;
&lt;p&gt;Now you can crank it up by&amp;nbsp;running:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo supervisord
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and check the&amp;nbsp;status&amp;#8230;
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo supervisorctl status
django_dev_fcgi:django_dev_fcgi_0 RUNNING    pid 15949, uptime 0:00:08
django_fcgi:django_fcgi_0        RUNNING    pid 15950, uptime 0:00:08
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Could it be more simple?  I doubt it.  This barely begins to scratch the surface of what supervisor can do.  Process groups/pools, &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; interface for remote management, built-in web interface for process management(utilizing &lt;span class="caps"&gt;XML&lt;/span&gt;-&lt;span class="caps"&gt;RPC&lt;/span&gt; interface), tons of process management options (priority, umask, user/group, capture std* pipes, environment variables, auto restart/start, process naming), event listeners/handling and a simple configuration ta boot!  All I&amp;#8217;m sayin&amp;#8217; is, it&amp;#8217;s awesome&amp;#8230;I&amp;#8217;m just&amp;nbsp;sayin&amp;#8217;.
&lt;/p&gt;
&lt;p&gt;Keeping with our simple but awesome theme, enter&amp;nbsp;nginx&amp;#8230;
&lt;/p&gt;
&lt;p&gt;My main&amp;nbsp;config:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;user www-data;
# Could vary by number of processors available.
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    access_log      /var/log/nginx/access.log;

    sendfile        on;

    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip  on;

    include /etc/nginx/sites/*;

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and my various site-specific configurations that I keep&amp;nbsp;/etc/nginx/sites:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
        # We listen on port 80
        listen 80;
        server_name just-another.net;

        # access and error logs for our site
        access_log /var/log/nginx/my_site_access_log;
        error_log /var/log/nginx/my_site_error_log;

        # Configure redirect for our fastcgi server
        # The fastcgi server later runs on localhost Port 8080
        location / {
                expires 10d;
                # to fastcgi server could use socket..
                #fastcgi_pass unix:{project_location}/log/django.sock;
                fastcgi_pass 127.0.0.1:8080;
                fastcgi_param PATH_INFO $fastcgi_script_name;
                fastcgi_param REQUEST_METHOD $request_method;
                fastcgi_param QUERY_STRING $query_string;
                fastcgi_param CONTENT_TYPE $content_type;
                fastcgi_param CONTENT_LENGTH $content_length;
                fastcgi_param REMOTE_ADDR $remote_addr;
                fastcgi_pass_header Authorization;
                fastcgi_intercept_errors on;
        }

        location /images {
    # For my own images..
            alias /home/bsmith/public_html/images;
            expires 10d;
        }

        # Alias for static content like themes
        location /static {
            alias /home/bsmith/Dev/byteflow/static;
            expires 10d;
        }

        # Alias for python contrib.admin stuff, needed for admin interface
        location /admin-media {
    # Point to my most recent install of django.
            alias /home/bsmith/Dev/django_trunk/django/contrib/admin/media;
            expires 10d;
        }
        # Point to media
        location /media {
            alias /home/bsmith/public_html/media;
            expires 10d;
        }
        # Use feedburner for my feeds.
        rewrite ^/rpc(.*) http://feeds.feedburner.com/Just-anothernetBlogPosts$1 permanent;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pretty simple, eh?  I have the same server setup for my &amp;#8216;dev&amp;#8217; site, only with a volatile code base that I can hack&amp;nbsp;on.
&lt;/p&gt;
&lt;p&gt;Now when I make code changes all I need to do is reload the supervisor process like&amp;nbsp;so:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo supervisorctl restart django_fcgi:django_fcgi_0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;for the production site or replacing the process name with &lt;code&gt;django_dev_fcgi:django_dev_fcgi_0&lt;/code&gt; to restart the dev site. I could also restart everything by replacing a process name with &lt;code&gt;all&lt;/code&gt; as an&amp;nbsp;argument.
&lt;/p&gt;
&lt;p&gt;The possibilities here for process management endless and I couldn&amp;#8217;t be happier with how simple it has become to run what I&amp;nbsp;have.
&lt;/p&gt;
&lt;p&gt;Basically, this setup is easy to get running and easy to keep running.  Highly recommended for any lazy django site maintainer like&amp;nbsp;myself!
&lt;/p&gt;
</description><guid isPermaLink="false">http://just-another.net/2009/01/18/byteflowdjangosupervisordnginx-win/</guid><category>byteflow,django,supervisor,nginx,python</category><feedburner:origLink>http://just-another.net/2009/01/18/byteflowdjangosupervisordnginx-win/</feedburner:origLink></item></channel></rss>
