XPressME Integration Kit

Trac

Initial Version から Version 1 における更新: TracModPython

差分発生行の前後
Ignore:
Timestamp:
Oct 30, 2008, 4:53:49 PM (15 years 前)
Author:
trac (IP: 127.0.0.1)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracModPython

    v1 v1  
     1= Trac と mod_python = #Tracandmod_python 
     2[[TracGuideToc]] 
     3 
     4Trac では [http://www.modpython.org/ mod_python] を利用可能です。 [http://www.modpython.org/ mod_python] は Trac のレスポンスタイムを飛躍的に向上し、特に [TracCgi CGI] と比べて、 [wiki:TracStandalone tracd]/mod_proxy では使用できない多くの Apache 機能を使えるようにします。 
     5 
     6以下の説明は Apache2 のためのものです; まだ Apache1.3 を使用しているなら、 [http://trac.edgewall.org/wiki/TracModPython2.7 TracModPython2.7] にいくつか情報があります。 
     7 
     8== シンプルなコンフィグレーション == #Simpleconfiguration 
     9 
     10mod_python をインストールしたら、 Apache の設定ファイルに以下の一行を追加してモジュールをロードしなければなりません: 
     11{{{ 
     12LoadModule python_module modules/mod_python.so 
     13}}} 
     14 
     15 ''Note: モジュールがインストールされている正しいパスは HTTPD をどこにインストールしたかによって変わります。'' 
     16Debian で apt-get を使用する場合 
     17{{{ 
     18apt-get install libapache2-mod-python libapache2-mod-python-doc 
     19}}} 
     20(Debian の続き) mod_python をインストールした後に、apache2 (上の Load Module に相当するもの) のモジュールを有効にしなければなりません : 
     21{{{ 
     22a2enmod mod_python 
     23}}} 
     24Fedora で yum を使用する場合: 
     25{{{ 
     26yum install mod_python 
     27}}} 
     28httpd.conf に以下を加えることで、 mod_python がインストールされたかテストすることができます。セキュリティ上の理由から、テストが終わった時点で以下のコンフィグは削除するべきです。 Note: mod_python.testhandler は mod_python 3.2+ で利用可能です。 
     29{{{ 
     30#!xml 
     31<Location /mpinfo> 
     32   SetHandler mod_python 
     33   PythonInterpreter main_interpreter 
     34   PythonHandler mod_python.testhandler 
     35</Location> 
     36}}} 
     37 
     38mod_python を使用した簡単な Trac のセットアップ方法は以下のようになります: 
     39{{{ 
     40#!xml 
     41<Location /projects/myproject> 
     42   SetHandler mod_python 
     43   PythonInterpreter main_interpreter 
     44   PythonHandler trac.web.modpython_frontend  
     45   PythonOption TracEnv /var/trac/myproject 
     46   PythonOption TracUriRoot /projects/myproject 
     47</Location> 
     48}}} 
     49 
     50'''`TracUriRoot`''' オプションは不要な場合もあります。 `TracUriRoot` オプションを付けずに試し、 Trac が正しく URL を生成できないか、 "No handler matched request to..." というエラーが出るようであれば '''`TracUriRoot`''' を追加して下さい。 `Location` と '''`TracUriRoot`''' が同じパスになるようにしてください。 
     51 
     52!PythonOption の一覧は以下の通りです。 
     53{{{ 
     54    # For a single project 
     55    PythonOption TracEnv /var/trac/myproject 
     56    # For multiple projects 
     57    PythonOption TracEnvParentDir /var/trac/myprojects 
     58    # For the index of multiple projects 
     59    PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_tepmlate.html 
     60    # A space delimitted list, with a "," between key and value pairs. 
     61    PythonOption TracTemplateVars key1,val1 key2,val2 
     62    # Useful to get the date in the wanted order 
     63    PythonOption TracLocale en_GB.UTF8 
     64    # See description above         
     65    PythonOption TracUriRoot /projects/myproject 
     66    # Override default python egg cache location 
     67    PythonOption PYTHON_EGG_CACHE /var/trac/myprojects/egg-cache 
     68}}} 
     69 
     70=== 認証設定 === #ConfiguringAuthentication 
     71 
     72パスワードファイルを作成して、認証を構成するには [wiki:TracCgi#AddingAuthentication CGI] と同じように行います。 
     73{{{ 
     74#!xml 
     75<Location /projects/myproject/login> 
     76  AuthType Basic 
     77  AuthName "myproject" 
     78  AuthUserFile /var/trac/myproject/.htpasswd 
     79  Require valid-user 
     80</Location> 
     81}}} 
     82 
     83Apache の mod_ldap 認証のコンフィグは少し扱いにくいです。(httpd 2.2.x と OpenLDAP: slapd 2.3.19) 
     84 
     851. Apache の httpd.conf に以下のモジュールをロードする必要があります 
     86{{{ 
     87LoadModule ldap_module modules/mod_ldap.so 
     88LoadModule authnz_ldap_module modules/mod_authnz_ldap.so 
     89}}} 
     90 
     912. httpd.conf は以下のような感じになります: 
     92 
     93{{{ 
     94#!xml 
     95<Location /trac/> 
     96  SetHandler mod_python 
     97  PythonInterpreter main_interpreter 
     98  PythonHandler trac.web.modpython_frontend 
     99  PythonOption TracEnv /home/trac/ 
     100  PythonOption TracUriRoot /trac/ 
     101  Order deny,allow 
     102  Deny from all 
     103  Allow from 192.168.11.0/24 
     104  AuthType Basic 
     105  AuthName "Trac" 
     106  AuthBasicProvider "ldap" 
     107  AuthLDAPURL "ldap://127.0.0.1/dc=example,dc=co,dc=ke?uid?sub?(objectClass=inetOrgPerson)" 
     108  authzldapauthoritative Off 
     109  require valid-user 
     110</Location> 
     111}}} 
     112 
     113Microsoft Active Directory の LDAP インタフェースを使用する場合: 
     114 
     115{{{ 
     116#!xml 
     117<Location /trac/> 
     118  SetHandler mod_python 
     119  PythonInterpreter main_interpreter 
     120  PythonHandler trac.web.modpython_frontend 
     121  PythonOption TracEnv /home/trac/ 
     122  PythonOption TracUriRoot /trac/ 
     123  Order deny,allow 
     124  Deny from all 
     125  Allow from 192.168.11.0/24 
     126  AuthType Basic 
     127  AuthName "Trac" 
     128  AuthBasicProvider "ldap" 
     129  AuthLDAPURL "ldap://adserver.company.com:3268/DC=company,DC=com?sAMAccountName?sub?(objectClass=user)" 
     130  AuthLDAPBindDN       ldap-auth-user@company.com 
     131  AuthLDAPBindPassword "the_password" 
     132  authzldapauthoritative Off 
     133  # require valid-user 
     134  require ldap-group CN=Trac Users,CN=Users,DC=company,DC=com 
     135</Location> 
     136}}} 
     137 
     138Note 1: このケースでは LDAP 検索で複数の OU をまとめて取得するために、 AD のグローバルカタログサーバ (Global Catalog Server) に接続しています (ポート番号が通常 LDAP で使用される 389 ではなく 3268 であることに注意してください) 。 GCS は基本的に "平らな" ツリーであり、ユーザが、どの OU に属するか不明な場合でも検索することができます。 
     139 
     140Note 2: Active Directory は、レコードにアクセスするために user/password (AuthLDAPBindDN と AuthLDAPBindPassword) による認証を必要とします。 (訳注: GC ではなく、通常の LDAP であれば Active Directory の ACL に認証なしユーザからの読み取り許可を設定すれば不要です) 
     141 
     142Note 3: "require ldap-group ..." ディレクティブはメンバのアクセスが許可されている AD のグループを指定します。 
     143 
     144 
     145 
     146=== !PythonPath を設定する === #SettingthePythonPath 
     147 
     148もし Trac のインストールが、通常の Python ライブラリのパスの中に無い場合、 Apache が Trac の mod_python ハンドラを見つけられるように `PythonPath` ディレクティブで指定しなければなりません: 
     149{{{ 
     150#!xml 
     151<Location /projects/myproject> 
     152  ... 
     153  PythonPath "sys.path + ['/path/to/trac']" 
     154  ... 
     155</Location> 
     156}}} 
     157 
     158!PythonPath ディレクティブを使用するときは気をつけてください。そして、 `SetEnv PYTHONPATH` は動かないので ''使用しない'' で下さい。 
     159 
     160== マルチプロジェクトのセットアップ == #Settingupmultipleprojects 
     161 
     162Trac の mod_python ハンドラには Subversion の `SvnParentPath` とよく似た `TracEnvParentDir` というコンフィグレーションオプションがあります。 
     163{{{ 
     164#!xml 
     165<Location /projects> 
     166  SetHandler mod_python 
     167  PythonInterpreter main_interpreter 
     168  PythonHandler trac.web.modpython_frontend  
     169  PythonOption TracEnvParentDir /var/trac 
     170  PythonOption TracUriRoot /projects 
     171</Location> 
     172}}} 
     173 
     174`/projects` の URL をリクエストすると、 TracEnvironment の親ディレクトリ `TracEnvParentDir` として設定したディレクトリ配下のサブディレクトリ一覧が表示されます。その一覧から何かプロジェクトを選択するとそれに該当する TracEnvironment を開くことができます。 
     175 
     176あなたのプロジェクトのホームページとして、サブディレクトリのリストが必要ないならば、以下のようにすることができます 
     177{{{ 
     178#!xml 
     179<LocationMatch "/.+/"> 
     180}}} 
     181 
     182これは !DocumentRoot フォルダの直下にカスタムホームページとして配置されていない場合には、すべてのロケーションで代わりに mod_python を使用することを Apache に教えます。 
     183 
     184すべてのプロジェクトに対して、 `<LocationMatch>` ディレクティブを使用することによって同じ認証の仕組みを使用することができます。 
     185{{{ 
     186#!xml 
     187<LocationMatch "/projects/[^/]+/login"> 
     188  AuthType Basic 
     189  AuthName "Trac" 
     190  AuthUserFile /var/trac/.htpasswd 
     191  Require valid-user 
     192</LocationMatch> 
     193}}} 
     194 
     195== 仮想ホストの設定 == #VirtualHostConfiguration 
     196 
     197以下に示す例は Trac を仮想サーバーとしてセットアップするときに必要な設定です。 (例えば、!http://trac.mycompany.com といった 
     198URL でアクセスすることができます): 
     199 
     200{{{ 
     201#!xml 
     202<VirtualHost * > 
     203    DocumentRoot /var/www/myproject 
     204    ServerName trac.mycompany.com 
     205    <Location /> 
     206        SetHandler mod_python 
     207        PythonInterpreter main_interpreter 
     208        PythonHandler trac.web.modpython_frontend 
     209        PythonOption TracEnv /var/trac/myproject 
     210        PythonOption TracUriRoot / 
     211    </Location> 
     212    <Location /login> 
     213        AuthType Basic 
     214        AuthName "MyCompany Trac Server" 
     215        AuthUserFile /var/trac/myproject/.htpasswd 
     216        Require valid-user 
     217    </Location> 
     218</VirtualHost> 
     219}}} 
     220 
     221`<Location>` の代わりに `<LocationMatch>` を使用してログインで問題が発生する場合 
     222 
     223複数のプロジェクトをサポートする仮想ホストの設定では、 "`TracEnv`" /var/trac/myproject を "`TracEnvParentDir`" /var/trac/ に置き換えて下さい。 
     224 
     225Note: !DocumentRoot should not point to your Trac project env. As Asmodai wrote on #trac: "suppose there's a webserer bug that allows disclosure of !DocumentRoot they could then leech the entire Trac environment". 
     226 
     227== トラブルシューティング == #Troubleshooting 
     228 
     229サーバエラーのページがでたときには、 まずは Apache のエラーログを確認するか、 `PythonDebug` オプションを有効にして下さい: 
     230{{{ 
     231#!xml 
     232<Location /projects/myproject> 
     233  ... 
     234  PythonDebug on 
     235</Location> 
     236}}} 
     237 
     238複数プロジェクトの場合は、全てのプロジェクトでサーバを再起動してみてください。 
     239 
     240=== Expat-related のセグメンテーションフォルト === #expat 
     241 
     242この問題は Unix 上で Python 2.4 を使用するとき、ほぼ確実に発生します。 
     243Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。 
     244Trac 0.11 は Genshi (間接的に Expat が使用される) を使用しているため、以前 Trac 0.10 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。 
     245 
     246Graham Dumpleton が、この問題について詳しく書いています。問題の [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash 説明と回避方法] を確認してください。 
     247 
     248=== フォームを送信するときの問題 === #Formsubmissionproblems 
     249 
     250もし、 Trac で何かしらのフォームを送信したときに、トラブルに見舞われたら (送信後にスタートページにリダイレクトされてしまう、などがよくある問題です)  {{{DocumentRoot}}} の中に mod_python をマッピングしたパスと同じフォルダやファイルが存在しないか確認してください。どういうわけか、 mod_python は静的リソースと同じところにマッピングされると混乱してしまいます。 
     251 
     252=== 仮想ホストの設定においての問題 === #Problemwithvirtualhostconfiguration 
     253 
     254<Location /> ディレクティブが使用されている場合に `DocumentRoot` を設定すると ''403 (Forbidden)'' エラーになることがあります。 `DocumentRoot` ディレクティブを削除するか、アクセスが許されているディレクトリに設定されているかどうかを確認して下さい (対応する `<Directory>` ブロックにて) 
     255 
     256<Location /> で `SetHandler` を使用すると、すべてを mod_python でハンドルすることになりますが、いかなる CSS も image/icons もダウンロードできなくなります。この問題を回避するために、われわれは <Location /trac> で `SetHandler None` を使用しています。しかし、この方法がエレガントな解決方法だとは思っていません。 
     257 
     258=== .htaccess ファイルを使用する === #Using.htaccess 
     259 
     260ディレクトリの設定をほんのちょっと修正するには `.htaccess` ファイルを使用すればいいかもしれませんが、これは動作しません。 Apache が Trac の URL に "/" (スラッシュ) を追加すると、正しい動作を妨げてしまいます。 
     261 
     262それでは、 mod_rewrite を使用すればいいように見えますが、これも動作しません。とにかく、百害あって一理なしです。指示に従ってください。 :) 
     263 
     264=== Win32 での特記 === #Win32Issues 
     265Windows 上で mod_python 3.2 より前のバージョンで Trac を動かしている場合、添付ファイルのアップロードが '''動かない''' でしょう。この問題は 3.1.4 以降で解決されました。 mod_python をアップグレードしてこの問題を解決してください。 
     266 
     267 
     268=== OS X での特記 === #OSXissues 
     269 
     270OS X で mod_python を使用するとき、 `apachectl restart` コマンドで Apache の再起動ができないでしょう。これは、 mod_python 3.2 でおそらく修正されるでしょう。しかし、 [http://www.dscpl.com.au/projects/vampire/patches.html ここ] にあるパッチを適用すれば、 3.2 以前のバージョンでもこの問題を回避できます。 
     271 
     272=== SELinux での特記 === #SELinuxissues 
     273 
     274もし、 Trac が ''Cannot get shared lock on db.lock'' というようなメッセージが出力したら、 
     275リポジトリに セキュリティコンテキストを設定する必要があるでしょう: 
     276 
     277{{{ 
     278chcon -R -h -t httpd_sys_content_t PATH_TO_REPOSITORY 
     279}}} 
     280 
     281[[http://subversion.tigris.org/faq.html#reposperms]] も参考にして下さい 
     282 
     283=== FreeBSD での特記 === #FreeBSDissues 
     284mod_python と sqlite パッケージのインストールバージョンに注意して下さい。 Ports には両パッケージともいろいろなバージョンがありますが、初期の pysqlite と mod_python は組み合わせることができません。前者は python のスレッド機能サポートが必要ですし、 後者 は python のスレッド機能なしのインストールが必要です。 
     285 
     286apache2 を普通にコンパイルしてインストールした場合、 apache はスレッドのサポートなしになります (これが FreeBSD 上であまりよく動かない原因)。 --enable-threads を使用して ./configure を実行することで apache にスレッドのサポートありにすることができますが、これはお勧めできません。 
     287最良のオプションは /usr/local/apache2/bin/ennvars に下記の一行を追加することだと  [[http://modpython.org/pipermail/mod_python/2006-September/021983.html 考えられます。]] 
     288 
     289{{{ 
     290export LD_PRELOAD=/usr/lib/libc_r.so 
     291}}} 
     292 
     293=== Subversion での特記 === #Subversionissues 
     294 
     295コマンドラインや TracStandalone で使用しているときは動くのに、 mod_python を使用しているときのみ、 `Unsupported version control system "svn"` というエラーが出力される場合、 [wiki:"TracModPython#SettingthePythonPath" PythonPath] ディレクティブに Python bindings へのパスを追加するのを忘れている可能性があります。 (Python の `site-packages` ディレクトリに Python binding へのリンクを追加するか、 `.pth` ファイルを作っておくのがベターです。) 
     296 
     297これに当てはまらない場合、使用している Subversion のライブラリが Apache が使用しているバージョンと適合性がないかもしれません。 (たいてい `apr` ライブラリの不適合性が原因になります。) その場合、 Apache の svn モジュール (`mod_dav_svn`) も使用できないでしょう。 
     298 
     299また、ランタイムエラー ({{{argument number 2: a 'apr_pool_t *' is expected}}}) を抑止するためにも、複数のサブインタプリタを使用できる最近のバージョンの `mod_python` が必要になります。 3.2.8 では ''たぶん'' 動きますが、 [http://trac.edgewall.org/ticket/3371 #3371] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう: 
     300{{{ 
     301PythonInterpreter main_interpreter 
     302}}} 
     303これは、よく知られている mod_python と Subversion の Python バインディングの他の問題 ([http://trac.edgewall.org/ticket/2611 #2611], [http://trac.edgewall.org/ticket/3455 #3455]) について推奨しているワークアラウンドです。 [http://trac.edgewall.org/ticket/3455#comment:9 #3455] Graham Dumpleton のコメントに問題点が指摘されています。 
     304 
     305=== ページレイアウトの問題 === #Pagelayoutissues 
     306 
     307Trac のページフォーマットが奇妙に見えるなら、ページレイアウトを管理するスタイルシートが Web サーバによって適切に扱われていない可能性が考えられます。 Apache のコンフィグに以下を追加してみてください: 
     308{{{ 
     309#!xml 
     310Alias /myproject/css "/usr/share/trac/htdocs/css" 
     311<Location /myproject/css> 
     312    SetHandler None 
     313</Location> 
     314}}} 
     315 
     316Note: 上記のコンフィグが効果を発揮するためには、プロジェクトの root 位置のコンフィグ後に追加しなければなりません。つまり {{{<Location /myproject />}}} 以降です。 
     317 
     318=== HTTPS の問題 === #HTTPSissues 
     319 
     320Trac を完全に https で実行したいにも関わらず、プレーンな http にリダイレクトされる場合、 Apache のコンフィグに以下を追加してください: 
     321{{{ 
     322#!xml 
     323<VirtualHost * > 
     324    DocumentRoot /var/www/myproject 
     325    ServerName trac.mycompany.com 
     326    SetEnv HTTPS 1 
     327    .... 
     328</VirtualHost> 
     329}}} 
     330 
     331=== Fedora 7 の問題 === #Fedora7Issues 
     332必ず 'python-sqlite2' をインストールしてください。 TracModPython では必須です (tracd では必須ではありません)。 
     333 
     334 
     335=== php5-mhash または その他の php5 モジュールのセグメンテーションフォルト === #Segmentationfaultwithphp5-mhashorotherphp5modules 
     336php5-mhash モジュールがインストールされている場合、 (debian etch について報告された) セグメンテーションフォルトに遭遇するでしょう。 php-mhash を削除して、問題が解決するかを確かめてみてください。 debian のバグレポート [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411487]] を参考にして下さい。 
     337 
     338システムライブラリの代わりに、サードパーティのライブラリでコンパイルされた php5 を使用する一部の人々にもトラブルが発生します。ここを確認してください [[http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault]] 
     339 
     340---- 
     341See also: TracGuide, TracInstall, TracCgi, TracFastCgi