Назад | Перейти на главную страницу

Django, WSGI и Apache2 - сайт идеально подходит для тестового сервера, не загружается с Apache

Хорошо, я не понимаю, что делаю здесь неправильно. У меня есть Linode VPS под управлением Ubuntu. Я установил Django 1.3, Apache2 и mod-WSGI. Я создал свой (очень простой) веб-сайт, добавил несколько изображений, имел лист CSS, favicon.ico и прекрасно работал с тестовым сервером Django. Сайт выглядит именно так - все изображения загружаются, CSS работает правильно и т. Д.

Затем я попытался запустить сайт с помощью Apache, но ничего не вышло. Вот мои соответствующие файлы конфигурации:

Сайты Apache включены / по умолчанию:

<VirtualHost *:80>
    ServerAdmin ***@***.com

    WSGIScriptAlias / /srv/www/django_site/django.wsgi
    AliasMatch ^/([^/]*\.css) /srv/www/django_site/static_media/css/$1
    Alias /static_media/ /srv/www/django_site/static_media/

    <Directory /srv/www/django_site>
        Options -Indexes
        Order deny,allow
        Allow from all
    </Directory>

    ErrorLog /srv/www/logs/error.log
    LogLevel warn

    CustomLog /srv/www/logs/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Мой сценарий WSGI (django.wsgi):

import os
import sys
path = '/srv/www'
if path not in sys.path:
   sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'django_site.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Когда я пытаюсь перейти на сайт, я получаю страницу с внутренней ошибкой 500. Отслеживание таково:

    Traceback (most recent call last):

 File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 111, in get_response
   response = callback(request, *callback_args, **callback_kwargs)

 File "/srv/www/django_site/quote/views.py", line 9, in about
   return render_to_response("pages/about.html", context_instance=RequestContext(request))

 File "/usr/local/lib/python2.6/dist-packages/django/shortcuts/__init__.py", line 20, in render_to_response
   return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 181, in render_to_string
   t = get_template(template_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 157, in get_template
   template, origin = find_template(template_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 128, in find_template
   loader = find_template_loader(loader_name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loader.py", line 95, in find_template_loader
   mod = import_module(module)

 File "/usr/local/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in     import_module
   __import__(name)

 File "/usr/local/lib/python2.6/dist-packages/django/template/loaders/app_directories.py", line 23, in <module>
   raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))

ImproperlyConfigured: ImportError quote: No module named quote

В трассировке я не знаю, почему утверждается, что существует No module named quote поскольку этот модуль действительно существует и отлично работает на тестовом сервере Django.

Это должно быть прямо. Что меня поражает, так это то, что у меня есть второй Linode VPS под управлением Ubuntu с другим веб-сайтом, который имеет точные файлы конфигурации, и он работает. в совершенстве.

Бьюсь об заклад, это простая настройка, и все будет работать.

Любые идеи?

Спасибо!

ОК - разобрался. После долгого выдергивания волос и разочарования все дошло до settings.py файл. Мой оригинал settings.py В файле был установлен раздел с моим маленьким приложением quote. Выглядело это так:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'quote',
)

Приложение South это утилита переноса схемы MySQL, а затем у нас есть мое единственное приложение под названием quote. это было этот строка, вызывающая все ошибки.

Решение: добавьте мой название проекта напротив имени моего приложения. Вот так:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'south',
'django_site.quote',
)

Да. То есть Это! Теперь сайт работает через Apache как надо. Я не понимаю, почему это не вызывало подобных ошибок на тестовом сервере Django. Ну что ж.

Эта ошибка с моей стороны, безусловно, унизительна!

+ Изменить path в твоем django.wsgi к /srv/www/django_site.

Он ожидает, что сможет импортировать ваши модули в библиотечный код в другом месте, чего он не может сделать, если они не будут в пути.