2012-01-14 6 views
0

私は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.docmethod.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

答えて

1

uWSGIと等価な方法でインタプリタを起動しています-OOオプションをPythonのコマンドラインに追加します。この第2レベルの最適化では、ドキュメント文字列が削除されます。

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

変更:

--optimize 2 

へ:

--optimize 1 
+0

うわー。私はそれを完全に見落とした!完璧に動作します! – jdi

+0

補足として、私のuwsgi設定は、私がオンラインで見つけたすべてのドキュメントの偽装です。私は本当にすべてのオプションを完全に調査していません。他のdjango/uwsgi設定からの推奨設定 – jdi

関連する問題