Sau khi làm việc với máy chủ dev của django trong hai tháng qua, thời gian cuối cùng đã chuyển sang apache + mod_wsgi.Django/Apache/mod_wsgi: Không có mô đun nào được đặt tên importlib
Vấn đề là khi tôi truy cập trang web của mình (hãy gọi nó là junux), với URL được ánh xạ tới ứng dụng django, mọi thứ dường như không hoạt động. Khi chạy máy chủ dev trên máy chủ, mọi thứ hoạt động bình thường.
Các mấu chốt của lỗi được đưa ra với tôi trong error_log apache:
ImportError: Could not import settings 'junux_site.settings' (Is it on sys.path?): No module named importlib
Tôi biết đây là tương tự cho nhiều câu hỏi khác về vấn đề này (có được rất nhiều mà tôi thắng' t thậm chí trích dẫn họ ở đây), nhưng tôi vẫn chưa tìm thấy câu trả lời. Tôi đã đọc khá một vài hướng dẫn về chuyển sang sản xuất, bao gồm tài liệu triển khai của django, hướng dẫn của mod_wsgi, một số bản trình bày pycon và đã googling vấn đề cả ngày ...
Rất nhiều chi tiết thú vị và thú vị bên dưới.
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn trước.
Cấu hình:
- Apache 2.2.15 với mod_wsgi trên CentOS 6
- Python 2.7.3 biên soạn từ nguồn
- Các trang web sử dụng một virtualenv
này là trang lỗi apache trả về:
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
Các apache error_log
tiết lộ các thông tin sau:
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
Các liên quan 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()
Và httpd.conf
: (thêm nội dung từ file cấu hình apache mặc định)
<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
Có một số WSGIScriptAlias
đến /test
để cung cấp sự kiểm tra sự thật rằng mod_wsgi thực sự hoạt động. Nó có. Khi mở URL đó, ứng dụng (rất đơn giản) hoạt động (một thế giới hello điển hình).
tôi đã thiết lập quyền để chmod o+r
trong hồ sơ của tôi và wsgi chmod o+rx
trên toàn bộ /var/www/junux_dev
dir, theo hướng dẫn trong việc trình bày pycon-sydney năm 2010 giới thiệu đến từ here.
đẹp bắt! Bật apache đã bị ràng buộc với python mà đến theo mặc định với CentOS 6 (2.6.6), thay vì một trong tôi biên dịch (2.7.3). Ngoài ra, tôi đã cài đặt mod_wsgi (3.2) từ 'yum', có thể đã cho tôi phiên bản tương thích với gói python mặc định, do đó không tuân thủ 2.7.3 mà tôi đang cố gắng sử dụng. Tắt để thiết lập lại python và biên dịch lại mod_wsgi ... Cảm ơn bạn. – scooz