Проблема развертывания Django и Buildout - PullRequest
1 голос
/ 03 октября 2010

Я пытаюсь развернуть свой существующий проект django через buildout, следуя в общих чертах инструкциям здесь .

Мой файл buildout.cfg:

[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}

Есть две проблемы:

  1. Прежде всего, если я вызываю интерпретатор python через ./bin/ python, я получаю ошибку при импорте myproject
  2. Во-вторых, если я пытаюсь загрузить файл django.wsgi, я также получаю ошибку apache
[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)

Мой django.Файл wsgi (обновлен в соответствии с предлагаемыми изменениями):

#!/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='')

Мой файл bin / django:

#!/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')

Кажется, что ни сервер импорта, ни сервер apache не работают

Ответы [ 4 ]

3 голосов
/ 05 декабря 2010

ваша проблема в том, что вы неправильно указали свои яичные зависимости в рецепте

в части сборки линия

eggs = myproject

вы устанавливаете свой собственный проект myproject django в качестве зависимости

в этих настройках вам нужно установить все ящики (пакеты) Python, которые являются зависимостями для вашего проекта django

например

eggs =
    psycopg2
    south
    django-debug-toolbar
    django-extensions

если в вашем проекте используется коннектор postgresql psycopg2, юг для миграции баз данных и django-debug-toolbar и django-extensions

Вы можете, кроме этого списка, установить любой пакет, который есть в вашей системе python.

удалите ваш проект из настройки eggs , это запутает вашу компоновку.

1 голос
/ 03 октября 2010

Возможно, вам нужно установить дополнительный путь к вашему проекту, чтобы он был помещен в путь Python.Не могли бы вы вставить свои файлы django.wsgi и django?

Попробуйте эту конфигурацию:

[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}

Вы также можете убедиться, что django.wsgi имеет права на выполнение

chmod +x django.wsgi
0 голосов
/ 16 августа 2012

Для меня сработало просто не касаться самой сборки, а просто убедиться, что все яйца были в PYTHONPATH при выполнении сценария .wsgi. Сам скрипт .wsgi выглядел следующим образом:

import os
import sys

PREFIX = '/path/to/my/app'  # the buildout is here

BUILDOUT_EGGS = [
    'Django-1.3-py2.6.egg',
    'South-0.7.6-py2.6.egg',
    'django_haystack-1.2.7-py2.6.egg',
    'djangopypi-0.4.4-py2.6.egg',
    'docutils-0.9.1-py2.6.egg',
    'setuptools-0.6c12dev_r88846-py2.6.egg',
    'zc.recipe.egg-1.3.2-py2.6.egg',
    'Whoosh-2.4.1-py2.6.egg',
    'django_registration-0.8_alpha_1-py2.6.egg',
    'djangorecipe-1.2.1-py2.6.egg',
#    'pkginfo-0.9-py2.6.egg',                                                                                                                                                                                                                                  
#    'zc.buildout-1.6.0-py2.6.egg',                                                                                                                                                                                                                            

]

sys.path[0:0] = [PREFIX] + ['%s/eggs/%s' % (PREFIX, egg) for egg in BUILDOUT_EGGS]

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

import djangorecipe.wsgi
application = djangorecipe.wsgi.main('myapp.settings', logfile='myapp.log')
0 голосов
/ 04 октября 2010

Одна вещь, которая выглядит действительно странно: '/usr/src/django/myproject/src(/usr/src/django/myproject)' в вашем файле bin / django и bin / django.wsgi.

Я никогда не видел такого () материала.Похоже, что это может сломать вещи.

Лучшая ставка: просто запустите

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

и посмотрите, что сам Python считает своим путем.Buildout настроил это нормально, но в вашем скрипте есть то, чего я никогда раньше не видел.

Другая альтернатива: вы уверены, что ваш реальный код не содержит ошибок импорта, которые в конечном итоге приводят к ошибкам импорта вашего приложения (иногда это может произойти, если вы зависите от библиотек уровня c, таких как PIL или cx_oracle).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...