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