Search code examples
pythondjangofastcgi

Deploying Django at alwaysdata.com


I am new on django. I tried this but I can't deploy. How can I do

#!/usr/bin/python
import sys
import os

base = os.path.dirname(os.path.abspath(__file__)) + '/..'
sys.path.append(base)

os.environ['DJANGO_SETTINGS_MODULE'] = 'myfirstapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler() 

AddHandler fcgid-script .fcgi
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(adminmedia/.*)$ - [L]
RewriteCond %{REQUEST_URI} !(cgi-bin/myproject.fcgi)
RewriteRule ^(.*)$ mysite.fcgi/$1 [L]

Solution

  • Here's the alwaysdata wiki entry for setting up Django with fastcgi. Only down-side: it's written in French.

    Well, I don't speak French, but what it basically says is:

    1. Create a directory named public in the folder of your django project.
    2. In that directory create the file django.fcgi with the following content:

      #!/usr/bin/python
      import os, sys
      
      _PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
      sys.path.insert(0, _PROJECT_DIR)
      sys.path.insert(0, os.path.dirname(_PROJECT_DIR))
      
      _PROJECT_NAME = _PROJECT_DIR.split('/')[-1]
      os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME
      
      from django.core.servers.fastcgi import runfastcgi
      runfastcgi(method="threaded", daemonize="false")
      
    3. Next, create a .htaccess in the public folder with the following content:

      AddHandler fcgid-script .fcgi
      RewriteEngine On
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]
      
    4. If you're planning to include the django admin interface, create this symbolic link in your public directory:

      ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media
      
    5. In the end your folder tree hierarchy should somehow look like this:

      myproject/
          __init__.py
          manage.py
          public/
              django.fcgi
              .htaccess
              media/
          settings.py
          urls.py
          myapp/
              views.py
              models.py
      

    Hope this helps. I talked with the admin, and he said he will soon provide an English wiki. Let's hope this is going to happen anytime soon.


    UPDATE: There is an English wiki article now.