views:

54

answers:

2

I am trying to deploy my existing django project via buildout, following loosely the instructions here.

my buildout.cfg file is:

[buildout]
parts       =     django python
develop     =     .
eggs        =     myproject

[django]
recipe      =     djangorecipe
version     =     1.2.3
project     =     myproject
projectegg  =     myproject
settings    =     settings
wsgi        =     true
eggs        =     ${buildout:eggs}

[python]
recipe      =     zc.recipe.egg
interpreter =     python
eggs        =     ${buildout:eggs}

There are two problems:

  1. First of all, if i invoke the python interpreter via ./bin/python, i get an import error with import myproject
  2. Secondly if i try to load the django.wsgi file, i also get an apache error
[Sun Oct 03 11:57:37 2010] [error] [client ::1] mod_wsgi (pid=5045): Target WSGI script '/usr/src/django/myproject/bin/django.wsgi' cannot be loaded as Python module.
[Sun Oct 03 11:57:37 2010] [error] [client ::1] mod_wsgi (pid=5045): SystemExit exception raised by WSGI script '/usr/src/django/myproject/bin/django.wsgi' ignored.
[Sun Oct 03 11:57:37 2010] [error] [client ::1] Traceback (most recent call last):
[Sun Oct 03 11:57:37 2010] [error] [client ::1]   File "/usr/src/django/myproject/bin/django.wsgi", line 20, in 
[Sun Oct 03 11:57:37 2010] [error] [client ::1]     application = djangorecipe.wsgi.main('myproject.settings', logfile='')
[Sun Oct 03 11:57:37 2010] [error] [client ::1]   File "/usr/src/django/myproject/eggs/djangorecipe-0.20-py2.6.egg/djangorecipe/wsgi.py", line 15, in main
[Sun Oct 03 11:57:37 2010] [error] [client ::1]     sys.exit(1)

My django.wsgi file is (updated as per suggested changes):

#!/usr/bin/python


import sys
sys.path[0:0] = [
  '/usr/src/django/myproject/src',
    '/usr/src/django/myproject/eggs/djangorecipe-0.20-py2.6.egg',
    '/usr/src/django/myproject/eggs/zc.recipe.egg-1.3.2-py2.6.egg',
    '/usr/src/django/myproject/eggs/zc.buildout-1.5.1-py2.6.egg',
    '/usr/local/lib/python2.6/dist-packages',
    '/usr/local/lib/python2.6/dist-packages',
    '/usr/src/django/myproject/parts/django',
    '/usr/src/django/myproject/eggs/setuptools-0.6c12dev_r85190-py2.6.egg',
    '/usr/src/django/myproject/parts/django',
    '/usr/src/django/myproject',
    '/usr/src/django/myproject/src(/usr/src/django/myproject)',
    '/usr/src/django/myproject',
  ]

import djangorecipe.wsgi

application = djangorecipe.wsgi.main('myproject.settings', logfile='')

my bin/django file is:

#!/usr/bin/python

import sys
sys.path[0:0] = [
    '/usr/src/django/myproject/src',
    '/usr/src/django/myproject/eggs/djangorecipe-0.20-py2.6.egg',
    '/usr/src/django/myproject/eggs/zc.recipe.egg-1.3.2-py2.6.egg',
    '/usr/src/django/myproject/eggs/zc.buildout-1.5.1-py2.6.egg',
    '/usr/local/lib/python2.6/dist-packages',
    '/usr/local/lib/python2.6/dist-packages',
    '/usr/src/django/myproject/parts/django',
    '/usr/src/django/myproject/eggs/setuptools-0.6c12dev_r85190-py2.6.egg',
    '/usr/src/django/myproject/parts/django',
    '/usr/src/django/myproject',
    '/usr/src/django/myproject/src(/usr/src/django/myproject)',
    '/usr/src/django/myproject',
    ]


import djangorecipe.manage

if __name__ == '__main__':
    djangorecipe.manage.main('myproject.settings')

Neither the import or the apache server seem to be working

+1  A: 

Probably you need to set extra path to your project so it would be put on python path. Could you paste your django.wsgi and django files ?

Try this config:

[buildout]
parts       =     django python
develop     =     .
eggs        =     myproject
extra_paths = 
    src(path_to your_project_source)
    ${buildout:directory}

[django]
recipe      =     djangorecipe
version     =     1.2.3
project     =     myproject
projectegg  =     myproject
settings    =     settings
wsgi        =     true
eggs        =     ${buildout:eggs}
extra-paths = ${buildout:extra_paths}

[python]
recipe      =     zc.recipe.egg
interpreter =     python
eggs        =     ${buildout:eggs}
extra-paths = ${buildout:extra_paths}

You can also make sure that django.wsgi has executable rights

chmod +x django.wsgi
Dominik Szopa
when i do the extra paths = src... line i get some wierd paths in the django and django.wsgi scripts , like '/usr/src/django/myproject/src(/usr/src/django/myproject)'. See also Reinout's answer. Is that line correct? I dont quite understand the function of that setting.
Dave
this line ``src(path_to your_project_source)`` was only example it should somethink like: src or "."
Dominik Szopa
A: 

The one thing that looks really strange: '/usr/src/django/myproject/src(/usr/src/django/myproject)' in both your bin/django and bin/django.wsgi file.

I've never seen that () stuff. It looks like it might break things.

Best bet: just run

$> bin/python
>>> import sys
>>> print sys.path

and see what python itself thinks its path is. Buildout sets it up OK, but you've got something I've never seen before in your script.

Another alternative: are you sure your actual code doesn't include import errors that are ending up as import errors of your application (this can sometimes happen if you depend on c-level libraries like PIL or cx_oracle).

Reinout van Rees
dosent 1.2.3 indicate the django version, not the djangorecpie version?
Dave
Oopsie, you're right, I was asleep. I've corrected my answer.
Reinout van Rees
i think the () stuff was from the extra_paths = src(path_to your_project_source) bit, a command i dont really understand the purpose of... what should i be looking for in the print sys.path? my code dosent have any import errors if i use the normal pythong interpreter.
Dave