2

我正在尝试通过构建部署我现有的 django 项目,大致按照此处的说明进行操作。

我的 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. 首先,如果我通过 ./bin/python 调用 python 解释器,我会收到 import 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' 无法加载为Python 模块。
[Sun Oct 03 11:57:37 2010] [error] [client ::1] mod_wsgi (pid=5045): SystemExit 由 WSGI 脚本 '/usr/src/django/myproject/bin/django.wsgi' 引发的异常被忽略.
[Sun Oct 03 11:57:37 2010] [error] [client ::1] Traceback(最近一次通话最后):
[Sun Oct 03 11:57:37 2010] [error] [client ::1] 文件“/usr/src/django/myproject/bin/django.wsgi”,第 20 行,在
[Sun Oct 03 11:57:37 2010] [error] [client ::1] application = djangorecipe.wsgi.main('myproject.settings', logfile='')
[2010 年 10 月 3 日星期日 11:57:37] [错误] [客户端 ::1] 文件“/usr/src/django/myproject/eggs/djangorecipe-0.20-py2.6.egg/djangorecipe/wsgi.py”,第 15 行,主要
[2010 年 10 月 3 日星期日 11:57:37] [错误] [客户端 ::1] sys.exit(1)

我的 django.wsgi 文件是(根据建议的更改更新):

#!/usr/bin/python


导入系统
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',
  ]

导入 djangorecipe.wsgi

应用程序 = djangorecipe.wsgi.main('myproject.settings', logfile='')

我的 bin/django 文件是:

#!/usr/bin/python

导入系统
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',
    ]


导入 djangorecipe.manage

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

导入或 apache 服务器似乎都没有工作

4

4 回答 4

4

您的问题是您在食谱中设置了错误的鸡蛋依赖性

在扩建部分这条线

eggs = myproject

您正在将自己的 myproject django 项目设置为依赖项

在此设置中,您需要设置所有作为 django 项目依赖项的 python 鸡蛋(包)

例如

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

如果您的项目使用 postgresql psycopg2 连接器,South 用于数据库迁移以及 django-debug-toolbar 和 django-extensions

您可以从此列表中排除您在 python 系统安装中拥有的任何包。

鸡蛋设置中删除您的项目,这会混淆您的构建。

于 2010-12-05T14:09:29.777 回答
1

可能您需要为您的项目设置额外的路径,以便将其放在 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
于 2010-10-03T19:10:49.703 回答
0

看起来很奇怪的一件事:'/usr/src/django/myproject/src(/usr/src/django/myproject)'在您的 bin/django 和 bin/django.wsgi 文件中。

我从未见过 () 的东西。看起来它可能会破坏东西。

最好的选择:跑

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

看看 python 本身认为它的路径是什么。Buildout 设置好了,但是你的脚本中有一些我以前从未见过的东西。

另一种选择:您确定您的实际代码不包含最终作为应用程序的导入错误的导入错误(如果您依赖于 PIL 或 cx_oracle 等 c 级库,有时会发生这种情况)。

于 2010-10-04T14:28:45.917 回答
0

对我有用的是根本不接触构建本身,而只是确保在执行脚本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')
于 2012-08-16T12:16:10.497 回答