У меня есть маленький vps с минимальной установкой убунту ясная рысь с памятью около 256 МБ, он недавно установлен, и на нем ничего особенного не работает. Я пытаюсь развернуть джанго к нему, пока я успешно запускаю сервер с помощью manage.py, я не могу получить Apache с участием WSGI работает:
# service apache2 start && service apache2 status
* Starting web server apache2 [ OK ]
Apache is NOT running.
Журнал Erorr /var/log/apache2/error.log
:
[Thu Apr 14 21:17:29 2011] [warn] pid file /var/run/apache2.pid overwritten -- Unclean shutdown of previous Apache run?
[Thu Apr 14 21:17:29 2011] [notice] Apache/2.2.14 (Ubuntu) mod_wsgi/2.8 Python/2.6.5 configured -- resuming normal operations
[Thu Apr 14 21:17:29 2011] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Thu Apr 14 21:17:29 2011] [error] Exception KeyError: KeyError(-1216795792,) in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored
[Thu Apr 14 21:17:29 2011] [alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread
[Thu Apr 14 21:17:29 2011] [error] Exception KeyError: KeyError(-1216795792,) in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored
[Thu Apr 14 21:17:31 2011] [alert] No active workers found... Apache is exiting!
Мой Apache файл конфигурации /etc/apache2/httpd.conf
:
WSGIScriptAlias / /usr/local/django/deals/apache/django.wsgi
<Directory /usr/local/django/deals/apache>
Order deny,allow
Allow from all
</Directory>
В /usr/local/django/deals/apache/django.wsgi
файл:
import os
import sys
path = '/usr/local/django/deals'
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'deals.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Вроде установлено:
# dpkg -l \*apache\* |grep -E '^ii'
ii apache2 2.2.14-5ubuntu8.4 Apache HTTP Server metapackage
ii apache2-mpm-worker 2.2.14-5ubuntu8.4 Apache HTTP Server - high speed threaded mod
ii apache2-utils 2.2.14-5ubuntu8.4 utility programs for webservers
ii apache2.2-bin 2.2.14-5ubuntu8.4 Apache HTTP Server common binary files
ii apache2.2-common 2.2.14-5ubuntu8.4 Apache HTTP Server common files
ii libapache2-mod-wsgi 2.8-2ubuntu1 Python WSGI adapter module for Apache
Я наконец понял, как это решить. Сначала у меня проблемы с обновлением убунту к 10.10 из 10.04 потому что сервер предлагал только 128 МБ (256 МБ с возможностью наращивания) и закончился в середине обновления. Возможно решение этой проблемы - просто обновить убунту. Однако я обновил мод-WSGI установив его из источника как описано здесь, но это, похоже, ни на что не повлияло.
Прорыв произошел, когда я установил apache2-mpm-prefork через apt-get install apache2-mpm-prefork
поэтому он будет использовать это вместо apache-mpm-worker так как диммер предложил. Я не уверен, была ли проблема в том, что apache-mpm-worker из-за того, что другие мои ошибки не регистрировались, возможно, следующий человек, у которого возникнет проблема, может попробовать пропустить этот шаг. Когда я переключился на apache-mpm-worker в Apache Журнал ошибок вместо этого выдает следующие ошибки.
mod_wsgi (pid=1436): Exception occurred processing WSGI script '/usr/local/django/deals/apache/django.wsgi'.
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/handlers/wsgi.py", line 250, in __call__
self.load_middleware()
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/handlers/base.py", line 39, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/utils/functional.py", line 276, in __getattr__
self._setup()
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/conf/__init__.py", line 89, in __init__
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'deals.settings' (Is it on sys.path?): No module named deals.setting
Это потому, что нам не удалось импортировать модуль настроек. В интеграция wsgi с документацией Django объяснил, что мне нужно добавить пути включения, как только я обновлю /usr/local/django/deals/apache/django.wsgi
все прошло гладко.
import os, sys
sys.path.append('/usr/local/django/deals')
sys.path.append('/usr/local/django')
os.environ['DJANGO_SETTINGS_MODULE'] = 'deals.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Это старая ошибка mod_wsgi. Обновите mod_wsgi до более новой версии.