私はREST json apiにdjango-pistonを使用していますが、generate_doc関数で構築されたピストンを使ってドキュメンテーション用に設定しています。 django runserverの下で、それは素晴らしい作品です。 docオブジェクトをループするテンプレートは、クラスと各メソッドのドキュメントストリングを正常にリストします。nginxの下でdjango-piston docsを実行しているときに空のdocstrings
私がnginxとuwsgi経由でサイトを提供しているとき、ドキュメントストリングは空です。最初はこれがdjangoのマークアップフィルターと再構成されたテキストフォーマットの問題であると思っていましたが、これをオフにしてテンプレートの未加工のドキュメントストリング値を見てみると、Noneになりました。
ログに何の問題もありません。なぜnginx/uwsgiがここの要因であるのか理解できませんが、正直なところ、dev runserver上ではうまくいきます。私は、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:
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
/etc/init/uwsgi.conf
そして、私のnginxのサーバーエントリの場所スニペットは次のようになります。
サイト対応/ 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
- ジャンゴ非REL 1.3.1
- ジャンゴ・ピストン最新のは、PyPI 0.2 0.3
- のpython 2.7
うわー。私はそれを完全に見落とした!完璧に動作します! – jdi
補足として、私のuwsgi設定は、私がオンラインで見つけたすべてのドキュメントの偽装です。私は本当にすべてのオプションを完全に調査していません。他のdjango/uwsgi設定からの推奨設定 – jdi