Получение шаблона void, передаваемого с сервера разработки django на сервер apache - PullRequest
1 голос
/ 18 февраля 2011

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

<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 выглядит так:

импорт ОС import sys

из sep импорта os.path

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

sys.path.append (basepath)
sys.path.append ( '/ дом / пример / 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 modules / mod_wsgi.so

Пользователь apache
Группа apache

ServerAdmin example@domain.com

DocumentRoot "/ usr / local / apache2 / htdocs"

<Directory />
Опции FollowSymLinks
Разрешить переопределение Нет
Заказ отказать, разрешить
Запретить от всех
</Directory>

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

Разрешить переопределение Нет

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

</Directory>

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

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

ErrorLog "logs / error_log"

LogLevel warn

<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" common

</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 text / plain

<IfModule mime_module>
TypesConfig conf / mime.types
Приложение AddType / x-compress .Z
Приложение AddType / x-gzip .gz .tgz
</IfModule>

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

1 Ответ

0 голосов
/ 23 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...