Хорошо, я не понимаю, что делаю здесь неправильно. У меня есть 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
.
Он ожидает, что сможет импортировать ваши модули в библиотечный код в другом месте, чего он не может сделать, если они не будут в пути.