2012-07-15 20 views
10

djangoの開発サーバーで過去2ヶ月間働いた後、ついにapache + mod_wsgiに移行しました。Django/Apache/mod_wsgi:importlibという名前のモジュールがありません

問題は私が自分のサイトに移動したとき(junuxと呼ぶ)、djangoアプリケーションにマップされたURLに問題が発生したようです。サーバー上でdevサーバーを実行すると、正常に動作します。

エラーのボトムラインは、Apacheのerror_logに私に与えられている:

ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib

私はこの問題について、他の多くの質問(私は「そう多くが勝っていることに似ています注意してくださいよ私はまだ答えを見つけていない。私は、djangoのデプロイメントドキュメント、mod_wsgiのガイド、pyconのプレゼンテーションなど、プロダクションに移行するためのガイドをかなり読んでいます。

下記の楽しいエキサイティングな詳細がたくさんあります。

ご協力いただければ幸いです。 ありがとうございます。設定


:6

  • のPython 2.7.3をソースからコンパイルしたCentOSの上のmod_wsgiと

    • のApache 2.2.15は
    • サイトはvirtualenvの

    これを使用していますエラーページApacheの戻り値:

    Internal Server Error 
    The server encountered an internal error or misconfiguration and was unable to complete your request. 
    Apache/2.2.15 (CentOS) Server at junux.net Port 80 
    

    apacheのerror_logは、以下の情報を明らかに:

    mod_wsgi (pid=22502): Create interpreter 'junux.net|/dev'. 
    mod_wsgi (pid=22502): Exception occurred processing WSGI script '/var/www/junux_dev/junux_site/wsgi.py'. 
    Traceback (most recent call last): 
        File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__ 
        self.load_middleware() 
        File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware 
        for middleware_path in settings.MIDDLEWARE_CLASSES: 
        File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner 
        self._setup() 
        File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup 
        self._wrapped = Settings(settings_module) 
        File "/var/www/junux_dev/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__ 
        raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
    ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib 
    

    関連wsgi.py

    import os 
    import sys 
    import site 
    
    # use our virtual environment 
    SITE_DIR = os.path.dirname(__file__) 
    PROJECT_ROOT = os.path.dirname(SITE_DIR) 
    site_packages = os.path.join(PROJECT_ROOT, 'venv/lib/python2.7/site-packages') 
    site.addsitedir(os.path.abspath(site_packages)) 
    sys.path.insert(0, SITE_DIR) 
    sys.path.insert(1, PROJECT_ROOT) 
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "junux_site.settings") 
    
    from django.core.wsgi import get_wsgi_application 
    application = get_wsgi_application() 
    

    そしてhttpd.conf: (デフォルトのApacheの設定ファイルから、ここでより多くのもの)

    <VirtualHost *:80> 
         ServerName junux.net 
         ServerAlias junux.net 
         ServerAdmin [email protected] 
    
         WSGIScriptAlias /test /var/www/test/hello.py 
         WSGIScriptAlias /dev /var/www/junux_dev/junux_site/wsgi.py 
    
         <Directory /var/www/test > 
         Order allow,deny 
         Allow from all 
         </Directory> 
    
         <Directory /var/www/junux_dev > 
         Options FollowSymLinks 
         Order allow,deny 
         Allow from all 
         </Directory> 
    
    </VirtualHost> 
    
    LogLevel info 
    

    WSGIScriptAlias/testは、mod_wsgiが実際に動作することの健全性チェックを提供します。します。そのURLを開くと(非常に単純な)アプリケーションが動作します(典型的なhello world)。

    hereからに参照さpycon-シドニー-2010のプレゼンテーションに指示されるように、私は、全体/var/www/junux_devディレクトリに私のWSGIファイルとchmod o+rxchmod o+rに権限を設定しています。

  • 答えて

    15

    mod_wsgiはコンパイルされたPythonのバージョンは何ですか?システムに複数のPythonがインストールされていて、仮想環境がPython 2.7を使用しているように見えますが、mod_wsgiは2.6に対してコンパイルされています。

    importlibはPython 2.7でのみ追加されていますので、mod_wsgiを2.6用にコンパイルしてそのベースインストールを使用すると、importlibが見つかりませんでした。

    実行チェック:

    http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Installation_In_Use

    +1

    ナイスキャッチ! Apacheが、コンパイルされたもの(2.7.3)ではなく、CentOS 6(2.6.6)でデフォルトで提供されたPythonにバインドされています。また、私は 'yum'からmod_wsgi(3.2)をインストールしました。おそらくデフォルトのpythonパッケージと互換性のあるバージョンを私に与えました。したがって、私が使用しようとしていた2.7.3に準拠していません。 Pythonをもう一度設定し直して、mod_wsgiを再コンパイルしてください。 ありがとうございます。 – scooz

    関連する問題