Получение шаблона void, передаваемого с сервера разработки django на сервер apache

У меня есть приложение django, которое отлично работает под сервером разработки django. Теперь я пытаюсь запустить его под apache2.2, используя mod_wsgi.
В файле httpd.conf apache я добавил:

<IfModule wsgi_module>
    WSGIScriptAlias /index my_path_to_wsgi_modules/django.wsgi
</IfModule>

а модуль django.wsgi содержит всю базовую конфигурацию, как описано в документации django: http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/
К сожалению, когда я запускаю сервер и пытаюсь получить доступ к главной странице, я получаю страницу шаблона, но без переменных данных в Это. В журнале сервера написано:

[Fri Feb 18 13:50:33 2011] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/api, referer: http://127.0.0.1/example/


Как я уже сказал, странно то, что один и тот же код отлично работает на сервере разработки django. Я новичок в программировании веб-приложений, кто-нибудь может помочь?

Мой файл django.wsgi выглядит так:

импорт ОС импорт систем

из os.path import sep

basepath = '/ home / example / WorkSpace / examplews / src'

sys.path.append (базовый путь)
sys.path.append ('/ home / example / WorkSpace / examplews / src / examplews')

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

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

И мой файл httpd.con, например:

ServerRoot "/ usr / local / apache2"

Слушай 80

LoadModule модули wsgi_module / mod_wsgi.so

Пользовательский apache
Групповой apache

ServerAdmin [email protected]

DocumentRoot "/ usr / local / apache2 / htdocs"

<Directory />
Параметры FollowSymLinks
AllowOverride None
Запретить заказ, разрешить
Запретить для всех
</Directory>

<Directory "/usr/local/apache2/htdocs">
Индексы опций FollowSymLinks

AllowOverride Нет

Заказать разрешить, запретить
Разрешить от всех

</Directory>

<IfModule dir_module>
DirectoryIndex index.html index.php index.sh default.jsp
</IfModule>

<FilesMatch "^\.ht">
Заказать разрешить, запретить
Запретить всем
Удовлетворить все
</FilesMatch>

ErrorLog "журналы / журнал_ошибок"

LogLevel предупреждать

<IfModule log_config_module>
LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent} i \ "" объединено
LogFormat "% h% l% u% t \"% r \ "%> s% b" общий

<IfModule logio_module>
LogFormat "% h% l% u% t \"% r \ "%> s% b \"% {Referer} i \ "\"% {User-Agent} i \ "% I% O" комбинированный
</IfModule>
CustomLog "logs / access_log" общий

</IfModule>

<IfModule alias_module>
</IfModule>

<IfModule cgid_module>
</IfModule>

<IfModule wsgi_module>
WSGIScriptAlias ​​/ main /home/example/WorkSpace/examplews/src/examplews/apache_conf/django.wsgi
</IfModule>
<Directory "/home/example/WorkSpace/examplews/src/examplews/apache_conf">
Разрешить, запретить
Разрешить от всех
</Directory>
DefaultType текст / простой

<IfModule mime_module>
TypesConfig conf / mime.types
AddType application / x-compress .Z
AddType application / x-gzip .gz .tgz
</IfModule>

<IfModule ssl_module>
Встроенный запуск SSLRandomSeed
Встроенный SSLRandomSeed connect
</IfModule>


person green69    schedule 18.02.2011    source источник
comment
/usr/local/apache2/htdocs/api действительно существует? Возможно, что-то еще в Apache неправильно настроено.   -  person Evan Porter    schedule 18.02.2011
comment
Нет, / usr / local / apache2 / htdocs / api не существует. На самом деле это виртуальный URL, к которому нужно получить доступ через django urls.py   -  person green69    schedule 18.02.2011
comment
Пожалуйста, опубликуйте свою полную конфигурацию Apache и файл wsgi.   -  person Daniel Roseman    schedule 18.02.2011
comment
Я разместил свои django.wsgi и httpd.conf выше. Большое спасибо!   -  person green69    schedule 18.02.2011


Ответы (1)


Наконец я нашел ошибку. Он был связан не с файлом httpd.conf, а с тем, как указываются URL-адреса как для файла django urls.py, так и для шаблонов.
Когда я смонтировал myapp следующим образом:

WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi

Я полагал, что URL-адреса, указанные в файлах шаблонов django, должны иметь начальную косую черту, например: '/api/dir'
Таким образом, приложение работает только на сервере разработки django, но не на apache.

Вместо этого, если вы используете URL-адреса без начальной косой черты, например:
'api/dir'
Приложение работает правильно как на сервере разработки django, так и на apache!

Вы должны избегать использования начальных косых черт даже в шаблоне соответствие файла django urls.py:
вот так: (r'^api/dir$', 'available_services')
и НЕ так: (r'^/api/dir$', 'available_services')

Возможно, это очевидная вещь для опытных пользователей django, но если вы новичок, как я, это может привести к потере определенного количества времени, потому что эту проблему сложно обнаружить.

person green69    schedule 23.02.2011