我试图通过buildout部署我现有的django项目,松散地遵循指令here .
我的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}
有两个问题:
-
首先,如果我通过./bin/python调用python解释器,导入myproject会出现导入错误
-
其次,如果我尝试加载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 回答
你的问题是你的食谱中的鸡蛋依赖性设置错了
在buildout部分中
您将自己的myproject django项目设置为依赖项目
在此设置中,您需要设置所有与django项目相关的python egg(包)
例如
如果您的项目使用postgresql psycopg2连接器,则南部用于数据库迁移和django-debug-toolbar和django-extensions
除了这个列表,您可以在python系统中安装任何软件包 .
从 eggs 设置中删除您的项目,这会混淆您的buildout .
可能你需要为你的项目设置额外的路径,所以它将放在python路径上 . 你能粘贴你的django.wsgi和django文件吗?
试试这个配置:
您还可以确保django.wsgi具有可执行权限
看起来很奇怪的一件事:你的bin / django和bin / django.wsgi文件中的
'/usr/src/django/myproject/src(/usr/src/django/myproject)'
.我从未见过那些()的东西 . 看起来它可能会破坏事物 .
最好的选择:跑步吧
并看看python本身认为它的路径是什么 . Buildout设置好了,但你在脚本中有一些我以前从未见过的东西 .
另一种选择:您确定您的实际代码不包含导致应用程序导入错误的导入错误(如果您依赖于像PIL或cx_oracle这样的c级库,有时会发生这种情况) .
对我来说有用的只是根本没有接触到扩建本身,只是确保在执行
.wsgi
脚本时所有的蛋都在PYTHONPATH
中 ..wsgi
脚本本身如下所示: