2

hereの指示に大まかに従って、既存の 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}

2 つの問題があります。

  1. まず、./bin/python 経由で python インタープリターを呼び出すと、import myproject でインポート エラーが発生します。
  2. 次に、django.wsgi ファイルを読み込もうとすると、Apache エラーも発生します。
[Sun Oct 03 11:57:37 2010] [error] [client ::1] mod_wsgi (pid=5045): ターゲット WSGI スクリプト '/usr/src/django/myproject/bin/django.wsgi' をロードできませんPython モジュール。
[2010 年 10 月 3 日 11:57:37] [エラー] [クライアント ::1] mod_wsgi (pid=5045): WSGI スクリプト '/usr/src/django/myproject/bin/django.wsgi' によって発生した SystemExit 例外は無視されました.
[2010 年 10 月 3 日 11:57:37] [エラー] [クライアント ::1] トレースバック (最新の呼び出しが最後):
[2010 年 10 月 3 日 11:57:37] [エラー] [クライアント ::1] ファイル "/usr/src/django/myproject/bin/django.wsgi"、20 行目
[2010 年 10 月 3 日 11:57:37] [エラー] [クライアント ::1] アプリケーション = 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行目、メイン
[Sun Oct 03 11:57:37 2010] [エラー] [クライアント :: 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 コネクタを使用している場合は、データベースの移行と django-debug-toolbar および django-extensions に south を使用します。

このリストから、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

本当に奇妙に見えることの 1 つ'/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 に答える