Пустые строки документации при запуске документации django-piston под nginx

Я использую django-piston для своего REST json API, и все это настроено для документирования с помощью поршней, встроенных в функцию generate_doc. Под django runserver работает отлично. Шаблон, который перебирает объекты документа, успешно отображает строки документации как для класса, так и для каждого метода.

Когда я обслуживаю сайт через nginx и uwsgi, строки документации пусты. Сначала я подумал, что это проблема с фильтром разметки django и использованием реструктурированного форматирования текста, но когда я отключил это и просто попытался увидеть необработанные значения строки документации в шаблоне, они равны None.

Я не вижу никаких проблем в журналах, и я не могу понять, почему nginx/uwsgi является здесь фактором, но, честно говоря, он отлично работает на сервере запуска разработчиков. Я как бы застрял в том, как начать отладку через 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;
    }
...
}

Изменить: информация о конфигурации

  • Сервер: Убунту 11.04
  • UWSGI версии 1.0
  • Версия nginx: nginx/1.0.11
  • Джанго не относится к версии 1.3.1
  • джанго-поршень последний pypi 0.2.3
  • питон 2.7

person jdi    schedule 14.01.2012    source источник


Ответы (1)


uWSGI запускает интерпретатор способом, эквивалентным опции -OO в командной строке Python. Этот второй уровень оптимизации удаляет строки документов.

-OO    : remove doc-strings in addition to the -O optimizations

Изменять:

--optimize 2

to:

--optimize 1
person Graham Dumpleton    schedule 14.01.2012
comment
Ух ты. Я совершенно упустил это из виду! Работает отлично!! - person jdi; 15.01.2012
comment
Кстати, моя конфигурация uwsgi представляет собой мешанину из всех документов, которые я нашел в Интернете. Я действительно не полностью исследовал каждый вариант. Это скорее рекомендуемая конфигурация из других настроек django/uwsgi. - person jdi; 15.01.2012