Я использую django-поршень для моего REST json api, и у меня все это настроено для документации через поршни, встроенные в функцию generate_doc.Под сервером запуска django он прекрасно работает.Шаблон, который проходит по объектам документов, успешно перечисляет строки документов как для класса, так и для каждого метода.
Когда я обслуживаю сайт через nginx и uwsgi, строки документации пусты.Сначала я подумал, что это проблема с фильтром разметки django и использованием форматирования restructuredtext, но когда я отключил это и просто попытался увидеть необработанные значения строки документа в шаблоне, они отсутствуют.
НадеюсьЯ не вижу никаких проблем в журналах, и я не могу понять, почему nginx / uwsgi является здесь фактором, но, честно говоря, он отлично работает на сервере запуска dev.Я как бы застрял на том, как начать отлаживать это через nginx / uwsgi.Кто-нибудь сталкивался с такой ситуацией или у меня есть предложение, где я могу начать искать?
Мой вид документа довольно прост:
views.py
def ApiDoc(request):
docs = [
generate_doc(handlers.UsersHandler),
generate_doc(handlers.CategoryHandler),
]
c = {
'docs': docs,
'model': 'Users'
}
return render_to_response("api/docs.html", c, RequestContext(request))
И мой шаблон почти идентичен стандартному шаблону поршня:
api / docs.html
{% load markup %}
...
{% for doc in docs %}
<h5><a href="#top">top</a></h5>
<h3><a id="{{doc.name}}">{{ doc.name|cut:"Handler" }}:</a></h3>
<p>
{{ doc.doc|default:""|restructuredtext }}
</p>
...
{% for method in doc.get_all_methods %}
{% if method.http_name in doc.allowed_methods %}
<dt><a id="{{doc.name}}_{{method.http_name}}">request</a> <i>{{ method.http_name }}</i></dt>
{% if method.doc %}
<dd>
{{ method.doc|default:""|restructuredtext }}
<dd>
{% endif %}
Отображаемый результат этого шаблона вnginx будет означать, что doc.doc
и method.doc
- None.Я попытался удалить фильтр и просто проверить необработанное значение, чтобы подтвердить это.
Я предполагаю, что проблема должна быть где-то в слое uwsgi и его среде.Я запускаю uwsgi с такой конфигурацией:
/ etc / init / uwsgi.conf
description "uWSGI starter"
start on (local-filesystems
and runlevel [2345])
stop on runlevel [016]
respawn
exec /usr/sbin/uwsgi \
--uid www-data \
--socket /opt/run/uwsgi.sock \
--master \
--logto /opt/log/uwsgi_access.log \
--logdate \
--optimize 2 \
--processes 4 \
--harakiri 120 \
--post-buffering 8192 \
--buffer-size 8192 \
--vhost \
--no-site
А мой фрагмент местоположения входа на сервер nginx выглядит так:
sites-enabled / mysite.com
server {
listen 80;
server_name www.mysite.com mysite.com;
set $home /var/www/mysite.com/projects/mysite;
set $pyhome /var/www/mysite.com/env/mysite;
root $home;
...
location ~ ^/(admin|api)/ {
include uwsgi_params;
uwsgi_pass uwsgi_main;
uwsgi_param UWSGI_CHDIR $home;
uwsgi_param UWSGI_SCRIPT wsgi_app;
uwsgi_param UWSGI_PYHOME $pyhome;
expires epoch;
}
...
}
Редактировать : Информация о конфигурации
- Сервер: Ubuntu 11.04
- uWSGI версия 1.0
- версия nginx: nginx / 1.0.11
- django non-rel 1.3.1
- последний поршень django pypi 0.2.3
- python 2.7