初期バージョン から バージョン 1 における更新: TracModWSGI

差分発生行の前後
無視リスト:
更新日時:
2010/10/22 10:54:19 (14 年 前)
更新者:
trac
コメント:

--

凡例:

変更なし
追加
削除
変更
  • TracModWSGI

    v1 v1  
     1= Trac と mod_wsgi = #Tracandmod_wsgi 
     2 
     3'''重要な Note:''' ''バージョン 1.3 か 2.3 かそれ以降の `mod_wsgi` を使用してください。バージョン 2.0 には添付ファイルのダウンロードで問題を生じます ([http://trac.edgewall.org/ticket/7205 #7205] 参照)。'' 
     4 
     5[http://code.google.com/p/modwsgi/ mod_wsgi] は WSGI 互換の Python アプリケーションを Apache 上で直接起動させることができる Apache のモジュールです。 
     6 
     7  mod_wsgi アダプタは、 Python ベースの Web アプリケーションを Apache にホスティングするための WSGI 互換のインタフェースを提供する Apacheのモジュールです。アダプタは Apache の C 言語ランタイム向けに完全に C 言語で書かれており、 Apache 内部にホストされる WSGI アプリケーションでは、従来からある mod_python や CGI 向けの WSGI アダプタ使用する場合に比べて相当よい性能を出すことができます。 
     8 
     9すでに Trac は mod_wsgi の top で起動させることができるようになっています。下記に示すようにアプリケーションスクリプトを Python のファイルとして作成してください。一般的にこのスクリプトは、 .wsgi という拡張子で保存します。 
     10 
     11{{{ 
     12import os 
     13 
     14os.environ['TRAC_ENV'] = '/usr/local/trac/mysite' 
     15os.environ['PYTHON_EGG_CACHE'] = '/usr/local/trac/mysite/eggs' 
     16 
     17import trac.web.main 
     18application = trac.web.main.dispatch_request 
     19}}} 
     20 
     21環境変数 {{{TRAC_ENV}}} は通常通り Trac environment のディレクトリを指定します (複数の Trac environment を含むディレクトリであれば {{{TRAC_ENV_PARENT_DIR}}} を使うこともできます)。 {{{PYTHON_EGG_CACHE}}} は Python eggs を一時的に展開するのに使用するディレクトリを指定します。[[BR]] 
     22明快さのために、このファイルの拡張子は {{{.wsgi}}} とすべきです。 Apache にアクセス権を開放できるのであれば、このファイルは自分が所有権を持つディレクトリに置くこともできます。 
     23この .wsgi ファイルは TracAdmin のコマンド {{{deploy}}} を使用することで作成することができます。 
     24 
     25Trac と egg ファイルをインストールしたパスが通常と異なる場合、それらのパスを以下の要領で wsgi スクリプトの先頭に記述する必要があります: 
     26{{{ 
     27import site 
     28site.addsitedir('/usr/local/trac/lib/python2.4/site-packages') 
     29}}} 
     30パスはインストールした Trac のライブラリに位置に一致するように変更してください。 
     31 
     32wsgi-script の準備ができたら、以下のように httpd.conf に設定を追加してください。 
     33 
     34{{{ 
     35WSGIScriptAlias /trac /usr/local/trac/mysite/apache/mysite.wsgi 
     36 
     37<Directory /usr/local/trac/mysite/apache> 
     38    WSGIApplicationGroup %{GLOBAL} 
     39    Order deny,allow 
     40    Allow from all 
     41</Directory> 
     42}}} 
     43 
     44Trac environment のサブディレクトリにスクリプトがある場合、 Apache がスクリプトを起動する為には、スクリプトが含まれるディレクトリまで完全に Apache がアクセスできなければなりません。 {{{WSGIApplicationGroup}}} ディレクティブを使用すると、常に mod_wsgi が作成した最初の Python インタプリタ内で Trac が起動することが保証されます; これは Trac で使用している Subversion の Python バインディングがサブインタプリタでは動作しないことがあるため必要になります。リクエストがハングし、 Apache がクラッシュしたような結果が返ります。この設定を行った後は Apache を再起動しないと反映されません。 
     45 
     46Apache, mod_wsgi, Python 本体 (Trac とその依存ライブラリを除く) の設定をテストしたい場合、簡単な wsgi アプリケーションを使用するとリクエストが処理されているか確認することができます (以下に示す内容だけを持つ .wsgi スクリプトを使用してください): 
     47 
     48{{{ 
     49def application(environ, start_response): 
     50        start_response('200 OK',[('Content-type','text/html')]) 
     51        return ['<html><body>Hello World!</body></html>'] 
     52}}} 
     53 
     54mod_wsgi の [http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac インストール例] に Trac の情報が掲載されています。 
     55 
     56トラブルシューティングの Tips は [TracModPython#Troubleshooting mod_python のトラブルシューティング] セクションも参考になります。 Apache に関連する問題の多くは似通っていて、多くの場合 mod_wsgi を使用する [http://code.google.com/p/modwsgi/wiki/ApplicationIssues アプリケーション側の問題] です。 
     57 
     58== Trac と PostgreSQL == #TracwithPostgreSQL 
     59 
     60mod_wsgi アダプタを使用し、 Trac のインスタンスを複数ホストしている場合に、 PostgreSQL (もしかすると MySQL も?) をデータベースバックエンドとして使用していると、大量のデータベース接続が生成され (PostgreSQL のプロセスも大量に発生し) てしまいます。 
     61 
     62さしあたり動く解決方法として、 Trac が持つコネクションプールを無効化する方法があります。これは trac.db.postgres_backend の PostgreSQLConnection クラスで定義されている poolable を False に設定することで適用できます。 
     63 
     64この方法を適用するために、 Trac のソースを変更する必要はありません。以下に示す行を trac.wsgi に追加してください: 
     65 
     66{{{ 
     67import trac.db.postgres_backend 
     68trac.db.postgres_backend.PostgreSQLConnection.poolable = False 
     69}}} 
     70 
     71この設定で Trac ページを生成した後にコネクションを捨てるようになり、データベースへの接続数は最小に保たれます。 
     72 
     73== SSPI および 'Require Group' 使用時に Trac を動かす方法 == #GettingTractoworknicelywithSSPIandRequireGroup 
     74Trac を Win32 上の Apache で起動し、 SSPI 設定して 'Require group' オプションを構成している場合、 'SSPIOmitDomain' オプションはおそらく動作しません。 Trac にユーザ名が認識されない場合は、 'user' が 'DOMAIN\user' のように見えている可能性があります。 
     75 
     76このような場合、以下のように WSGI スクリプトを修正すると解決すると思います: 
     77{{{ 
     78import os 
     79import trac.web.main 
     80 
     81os.environ['TRAC_ENV'] = '/usr/local/trac/mysite' 
     82os.environ['PYTHON_EGG_CACHE'] = '/usr/local/trac/mysite/eggs' 
     83 
     84def application(environ, start_response): 
     85    if "\\" in environ['REMOTE_USER']: 
     86        environ['REMOTE_USER'] = environ['REMOTE_USER'].split("\\", 1)[1] 
     87    return trac.web.main.dispatch_request(environ, start_response) 
     88}}} 
     89---- 
     90See also:  TracGuide, TracInstall, [wiki:TracFastCgi FastCGI], [wiki:TracModPython ModPython], [http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe]