TracModPythonバージョン 2バージョン 3 との変更


以下の違いを無視:
日時:
2012/10/20 13:54:06 (13年前)
更新者:
trac
コメント:

--

凡例:

未変更
追加
削除
更新
  • TracModPython

    v2 v3  
    44Trac では [http://www.modpython.org/ mod_python] を利用可能です。 [http://www.modpython.org/ mod_python] は Trac のレスポンスタイムを飛躍的に向上し、特に [TracCgi CGI] と比べて、 [wiki:TracStandalone tracd]/mod_proxy では使用できない多くの Apache 機能を使えるようにします。 
    55 
    6 以下の説明は Apache2 のためのものです; まだ Apache1.3 を使用しているなら、 [http://trac.edgewall.org/wiki/TracModPython2.7 TracModPython2.7] にいくつか情報があります。 
    7  
    8 == 警告 == #AWordofWarning 
     6{{{#!div class="important" 
     7** A Word of Warning ** 
    98 
    1092010 年 6 月 16 日に、 mod_python プロジェクトが正式に終了しました。もし mod_python を新しいインストールで使用することを考えているならば、 '''お願いだからしないで下さい'''! 解決されない既知の課題がありますし、今ではより良い代替手段もあります。詳細については、インストールしようとしているバージョンの TracInstall ページをチェックして下さい。 
    11  
    12 == シンプルなコンフィグレーション == #Simpleconfiguration 
     10}}} 
     11 
     12 
     13以下の説明は Apache2 のためのものです; まだ Apache1.3 を使用しているなら、 [trac:TracModPython2.7 TracModPython2.7] にいくつか情報がありますが、すべてあなた一人で設定することになるでしょう。 
     14 
     15[[PageOutline(2-3,Overview,inline)]] 
     16 
     17== シンプルな設定: 単一プロジェクト == #Simpleconfiguration 
    1318 
    1419mod_python をインストールしたら、 Apache の設定ファイルに以下の一行を追加してモジュールをロードしなければなりません: 
     
    4954   SetHandler mod_python 
    5055   PythonInterpreter main_interpreter 
    51    PythonHandler trac.web.modpython_frontend  
     56   PythonHandler trac.web.modpython_frontend 
    5257   PythonOption TracEnv /var/trac/myproject 
    5358   PythonOption TracUriRoot /projects/myproject 
     
    6368    # For a single project 
    6469    PythonOption TracEnv /var/trac/myproject 
     70 
    6571    # For multiple projects 
    6672    PythonOption TracEnvParentDir /var/trac/myprojects 
     73 
    6774    # For the index of multiple projects 
    6875    PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html 
     76 
    6977    # A space delimitted list, with a "," between key and value pairs. 
    7078    PythonOption TracTemplateVars key1,val1 key2,val2 
     79 
    7180    # Useful to get the date in the wanted order 
    7281    PythonOption TracLocale en_GB.UTF8 
    73     # See description above         
     82 
     83    # See description above 
    7484    PythonOption TracUriRoot /projects/myproject 
    7585}}} 
     
    8292}}} 
    8393 
    84 または Genshi の egg を解凍して展開することで、この問題を回避できます。 
     94又は Genshi の egg を解凍して展開することで、この問題を回避できます。 
     95 
    8596=== 認証設定 === #ConfiguringAuthentication 
    8697 
    87 パスワードファイルを作成して、認証を構成するには [wiki:TracCgi#AddingAuthentication CGI] と同じように行います。 
    88 {{{ 
    89 #!xml 
    90 <Location /projects/myproject/login> 
    91   AuthType Basic 
    92   AuthName "myproject" 
    93   AuthUserFile /var/trac/myproject/.htpasswd 
    94   Require valid-user 
    95 </Location> 
    96 }}} 
    97  
    98 Apache の mod_ldap 認証のコンフィグは少し扱いにくいです。(httpd 2.2.x と OpenLDAP: slapd 2.3.19) 
    99  
    100 1. Apache の httpd.conf に以下のモジュールをロードする必要があります 
    101 {{{ 
    102 LoadModule ldap_module modules/mod_ldap.so 
    103 LoadModule authnz_ldap_module modules/mod_authnz_ldap.so 
    104 }}} 
    105  
    106 2. httpd.conf は以下のような感じになります: 
    107  
    108 {{{ 
    109 #!xml 
    110 <Location /trac/> 
     98[wiki:TracModWSGI#ConfiguringAuthentication] ページの対応する項目を参照してください。 
     99 
     100 
     101== 詳細な設定 == #AdvancedConfiguration 
     102 
     103=== Python Egg Cache を設定する === #SettingthePythonEggCache 
     104 
     105Web サーバが Egg Cache に書き込みできない場合、パーミッションを変更するか、 Apache が書き込み可能な場所を指定する必要があります。設定しないと ''500 Internal Server Error'' や syslog へのエラー出力が発生します。 
     106 
     107{{{ 
     108#!xml 
     109<Location /projects/myproject> 
     110  ... 
     111  PythonOption PYTHON_EGG_CACHE /tmp 
     112  ... 
     113</Location> 
     114}}} 
     115 
     116 
     117=== !PythonPath を設定する === #SettingthePythonPath 
     118 
     119もし Trac のインストールが、通常の Python ライブラリのパスの中に無い場合、 Apache が Trac の mod_python ハンドラを見つけられるように `PythonPath` ディレクティブで指定しなければなりません: 
     120{{{ 
     121#!xml 
     122<Location /projects/myproject> 
     123  ... 
     124  PythonPath "sys.path + ['/path/to/trac']" 
     125  ... 
     126</Location> 
     127}}} 
     128 
     129!PythonPath ディレクティブを使用するときは気をつけてください。そして、 `SetEnv PYTHONPATH` は動かないので ''使用しない'' で下さい。 
     130 
     131=== マルチプロジェクトのセットアップ === #Settingupmultipleprojects 
     132 
     133Trac の mod_python ハンドラには Subversion の `SvnParentPath` とよく似た `TracEnvParentDir` というコンフィグレーションオプションがあります。 
     134{{{ 
     135#!xml 
     136<Location /projects> 
    111137  SetHandler mod_python 
    112138  PythonInterpreter main_interpreter 
    113139  PythonHandler trac.web.modpython_frontend 
    114   PythonOption TracEnv /home/trac/ 
    115   PythonOption TracUriRoot /trac/ 
    116   Order deny,allow 
    117   Deny from all 
    118   Allow from 192.168.11.0/24 
    119   AuthType Basic 
    120   AuthName "Trac" 
    121   AuthBasicProvider "ldap" 
    122   AuthLDAPURL "ldap://127.0.0.1/dc=example,dc=co,dc=ke?uid?sub?(objectClass=inetOrgPerson)" 
    123   authzldapauthoritative Off 
    124   require valid-user 
    125 </Location> 
    126 }}} 
    127  
    128 Microsoft Active Directory の LDAP インタフェースを使用する場合: 
    129  
    130 {{{ 
    131 #!xml 
    132 <Location /trac/> 
    133   SetHandler mod_python 
    134   PythonInterpreter main_interpreter 
    135   PythonHandler trac.web.modpython_frontend 
    136   PythonOption TracEnv /home/trac/ 
    137   PythonOption TracUriRoot /trac/ 
    138   Order deny,allow 
    139   Deny from all 
    140   Allow from 192.168.11.0/24 
    141   AuthType Basic 
    142   AuthName "Trac" 
    143   AuthBasicProvider "ldap" 
    144   AuthLDAPURL "ldap://adserver.company.com:3268/DC=company,DC=com?sAMAccountName?sub?(objectClass=user)" 
    145   AuthLDAPBindDN       ldap-auth-user@company.com 
    146   AuthLDAPBindPassword "the_password" 
    147   authzldapauthoritative Off 
    148   # require valid-user 
    149   require ldap-group CN=Trac Users,CN=Users,DC=company,DC=com 
    150 </Location> 
    151 }}} 
    152  
    153 Note 1: このケースでは LDAP 検索で複数の OU をまとめて取得するために、 AD のグローバルカタログサーバ (Global Catalog Server) に接続しています (ポート番号が通常 LDAP で使用される 389 ではなく 3268 であることに注意してください) 。 GCS は基本的に "平らな" ツリーであり、ユーザが、どの OU に属するか不明な場合でも検索することができます。 
    154  
    155 Note 2: Active Directory は、レコードにアクセスするために user/password (AuthLDAPBindDN と AuthLDAPBindPassword) による認証を必要とします。 (訳注: GC ではなく、通常の LDAP であれば Active Directory の ACL に認証なしユーザからの読み取り許可を設定すれば不要です) 
    156  
    157 Note 3: "require ldap-group ..." ディレクティブはメンバのアクセスが許可されている AD のグループを指定します。 
    158  
    159  
    160 === Python Egg Cache を設定する === #SettingthePythonEggCache 
    161  
    162 Web サーバが Egg Cache に書き込みできない場合、パーミッションを変更するか、 Apache が書き込み可能な場所を指定する必要があります。設定しないと ''500 Internal Server Error'' や syslog へのエラー出力が発生します。 
    163  
    164 {{{ 
    165 #!xml 
    166 <Location /projects/myproject> 
    167   ... 
    168   PythonOption PYTHON_EGG_CACHE /tmp  
    169   ... 
    170 </Location> 
    171 }}} 
    172  
    173  
    174 === !PythonPath を設定する === #SettingthePythonPath 
    175  
    176 もし Trac のインストールが、通常の Python ライブラリのパスの中に無い場合、 Apache が Trac の mod_python ハンドラを見つけられるように `PythonPath` ディレクティブで指定しなければなりません: 
    177 {{{ 
    178 #!xml 
    179 <Location /projects/myproject> 
    180   ... 
    181   PythonPath "sys.path + ['/path/to/trac']" 
    182   ... 
    183 </Location> 
    184 }}} 
    185  
    186 !PythonPath ディレクティブを使用するときは気をつけてください。そして、 `SetEnv PYTHONPATH` は動かないので ''使用しない'' で下さい。 
    187  
    188 == マルチプロジェクトのセットアップ == #Settingupmultipleprojects 
    189  
    190 Trac の mod_python ハンドラには Subversion の `SvnParentPath` とよく似た `TracEnvParentDir` というコンフィグレーションオプションがあります。 
    191 {{{ 
    192 #!xml 
    193 <Location /projects> 
    194   SetHandler mod_python 
    195   PythonInterpreter main_interpreter 
    196   PythonHandler trac.web.modpython_frontend  
    197140  PythonOption TracEnvParentDir /var/trac 
    198141  PythonOption TracUriRoot /projects 
     
    221164}}} 
    222165 
    223 == 仮想ホストの設定 == #VirtualHostConfiguration 
     166=== 仮想ホストの設定 === #VirtualHostConfiguration 
    224167 
    225168以下に示す例は Trac を仮想サーバーとしてセットアップするときに必要な設定です。 (例えば、!http://trac.mycompany.com といった 
     
    248191 
    249192この設定は全てのケースでうまく動くわけではありません。動かない場合は以下を試してください: 
    250  * `<Location>` の代わりに `<LocationMatch>` を使用する 
    251  * <Location />  はサーバの設定によっては、単にサーバのルートではなく完全なホスト名を参照していることがあります。このような場合、 (上記の例では下段にあたるログイン用ディレクトリを含む) 全てのリクエストが Python に送信され、認証が動かなくなります (認証を行おうとすると、認証が設定されていないというエラー画面が表示されます)。 URL を変更できるのであれば (/, /login の代わりに /web/, /web/login などのように) ルートではなくサブディレクトリを使ってみてください 
    252  * Apache の `NameVirtualHost` を設定している場合、 `<VirtualHost *>` ではなく `<VirtualHost *:80>` を使用せねばならないかもしれません 
     193 * `<Location>` の代わりに `<LocationMatch>` を使用する 
     194 * <Location />  はサーバの設定によっては、単にサーバのルートではなく完全なホスト名を参照していることがあります。このような場合、 (上記の例では下段にあたるログイン用ディレクトリを含む) 全てのリクエストが Python に送信され、認証が動かなくなります (認証を行おうとすると、認証が設定されていないというエラー画面が表示されます)。 URL を変更できるのであれば (/, /login の代わりに /web/, /web/login などのように) ルートではなくサブディレクトリを使ってみてください 
     195 * Apache の `NameVirtualHost` を設定している場合、 `<VirtualHost *>` ではなく `<VirtualHost *:80>` を使用せねばならないかもしれません 
    253196 
    254197複数のプロジェクトをサポートする仮想ホストの設定では、 "`TracEnv`" /var/trac/myproject を "`TracEnvParentDir`" /var/trac/ に置き換えて下さい。 
     
    269212複数プロジェクトの場合は、全てのプロジェクトでサーバを再起動してみてください。 
    270213 
    271 === Expat-related のセグメンテーションフォルト === #expat 
     214=== 動作しないログイン === #LoginNotWorking 
     215`<Location />` ディレクティブを使用した場合、 他のディレクティブ同様、`<Location /Login>` ディレクティブをオーバーライドします。 
     216この問題を回避するには、次のように否定表現を使用します (マルチプロジェクト設定向け): 
     217{{{ 
     218#!xml 
     219#this one for other pages 
     220<Location ~ "/*(?!login)"> 
     221   SetHandler mod_python 
     222   PythonHandler trac.web.modpython_frontend 
     223   PythonOption TracEnvParentDir /projects 
     224   PythonOption TracUriRoot / 
     225 
     226</Location> 
     227#this one for login page 
     228<Location ~ "/[^/]+/login"> 
     229   SetHandler mod_python 
     230   PythonHandler trac.web.modpython_frontend 
     231   PythonOption TracEnvParentDir /projects 
     232   PythonOption TracUriRoot / 
     233 
     234   #remove these if you don't want to force SSL 
     235   RewriteEngine On 
     236   RewriteCond %{HTTPS} off 
     237   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
     238 
     239   AuthType Basic 
     240   AuthName "Trac" 
     241   AuthUserFile /projects/.htpasswd 
     242   Require valid-user 
     243</Location> 
     244}}} 
     245 
     246=== Expat-related segmentation faults === #expat 
    272247 
    273248この問題は Unix 上で Python 2.4 を使用するとき、ほぼ確実に発生します。 
    274 Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。 
    275 Trac 0.11 は Genshi (間接的に Expat が使用される) を使用しているため、以前 Trac 0.10 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。 
     249Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と 
     250Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。 
     251Trac 0.11 は Genshi (間接的に Expat が使用される) を使用しているため、 
     252以前 Trac 0.10 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。 
    276253 
    277254Graham Dumpleton が、この問題について詳しく書いています。問題の [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash 説明と回避方法] を確認してください。 
     
    289266=== Zip された egg での問題 === #Problemwithzippedegg 
    290267 
    291 mod_python のバージョンによっては Zip された egg ファイルからモジュールを import できないことがあります。 Apache のログに `ImportError: No module named trac` が出力される場合、問題が発生している原因であると考えられます。 Python の site-packages ディレクトリを見てみてください; Trac のモジュールが ''ディレクトリ'' ではなく ''ファイル'' として配置されている場合、問題の原因と考えられます。解決するためには、下記の上に `--always-unzip` オプションと伴に Trac をインストールしてみてください。 
     268mod_python のバージョンによっては Zip された egg ファイルからモジュールを import できないことがあります。 Apache のログに `ImportError: No module named trac` が出力される場合、問題が発生している原因であると考えられます。 Python の site-packages ディレクトリを見てみてください Trac のモジュールが ''ディレクトリ'' ではなく ''ファイル'' として配置されている場合、問題の原因と考えられます。解決するためには、下記の上に `--always-unzip` オプションと伴に Trac をインストールしてみてください。 
    292269 
    293270{{{ 
     
    302279 
    303280成功した事例:  以下の設定値で成功した事例があります: 
    304 {{{ 
     281{{{#!xml 
    305282SetHandler mod_python 
    306283PythonInterpreter main_interpreter 
    307 PythonHandler trac.web.modpython_frontend  
     284PythonHandler trac.web.modpython_frontend 
    308285PythonOption TracEnv /system/path/to/this/directory 
    309286PythonOption TracUriRoot /path/on/apache 
     
    327304}}} 
    328305 
    329  
    330 === Win32 での特記 === #Win32Issues 
     306=== 特定のプラットフォームでの問題 === #Platformspecificissues 
     307==== Win32 での問題 ==== #Win32issues 
    331308Windows 上で mod_python 3.2 より前のバージョンで Trac を動かしている場合、添付ファイルのアップロードが '''動かない''' でしょう。この問題は 3.1.4 以降で解決されました。 mod_python をアップグレードしてこの問題を解決してください。 
    332309 
    333310 
    334 === OS X での特記 === #OSXissues 
     311==== OS X での問題 ==== #OSXissues 
    335312 
    336313OS X で mod_python を使用するとき、 `apachectl restart` コマンドで Apache の再起動ができないでしょう。これは、 mod_python 3.2 でおそらく修正されるでしょう。しかし、 [http://www.dscpl.com.au/projects/vampire/patches.html ここ] にあるパッチを適用すれば、 3.2 以前のバージョンでもこの問題を回避できます。 
    337314 
    338 === SELinux での特記 === #SELinuxissues 
     315==== SELinux での問題 ==== #SELinuxissues 
    339316 
    340317もし、 Trac が ''Cannot get shared lock on db.lock'' というようなメッセージが出力したら、 
     
    347324[http://subversion.tigris.org/faq.html#reposperms] も参考にして下さい 
    348325 
    349 === FreeBSD での特記 === #FreeBSDissues 
     326==== FreeBSD での問題 ==== #FreeBSDissues 
    350327mod_python と sqlite パッケージのインストールバージョンに注意して下さい。 Ports には両パッケージともいろいろなバージョンがありますが、初期の pysqlite と mod_python は組み合わせることができません。前者は python のスレッド機能サポートが必要ですし、 後者 は python のスレッド機能なしのインストールが必要です。 
    351328 
     
    357334}}} 
    358335 
    359 === Subversion での特記 === #Subversionissues 
     336 
     337==== Fedora 7 での問題 ==== #Fedore7Issues 
     338'python-sqlite2' を必ずインストールしてください。tracd では必須ではありませんが、 TracModPython では必須です。 
     339 
     340 
     341=== Subversion での問題 === #Subversionissues 
    360342 
    361343コマンドラインや TracStandalone で使用しているときは動くのに、 mod_python を使用しているときのみ、 `Unsupported version control system "svn"` というエラーが出力される場合、 [wiki:"TracModPython#SettingthePythonPath" PythonPath] ディレクティブに Python bindings へのパスを追加するのを忘れている可能性があります。 (Python の `site-packages` ディレクトリに Python binding へのリンクを追加するか、 `.pth` ファイルを作っておくのがベターです。) 
     
    363345これに当てはまらない場合、使用している Subversion のライブラリが Apache が使用しているバージョンと適合性がないかもしれません。 (たいてい `apr` ライブラリの不適合性が原因になります。) その場合、 Apache の svn モジュール (`mod_dav_svn`) も使用できないでしょう。 
    364346 
    365 また、ランタイムエラー ({{{argument number 2: a 'apr_pool_t *' is expected}}}) を抑止するためにも、複数のサブインタプリタを使用できる最近のバージョンの `mod_python` が必要になります。 3.2.8 では ''たぶん'' 動きますが、 [http://trac.edgewall.org/ticket/3371 #3371] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう: 
     347また、ランタイムエラー ({{{argument number 2: a 'apr_pool_t *' is expected}}}) を抑止するためにも、複数のサブインタプリタを使用できる最近のバージョンの `mod_python` が必要になります。 3.2.8 では ''たぶん'' 動きますが、 [trac:#3371] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう: 
    366348{{{ 
    367349PythonInterpreter main_interpreter 
    368350}}} 
    369 これは、よく知られている 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 のコメントに問題点が指摘されています。 
     351これは、よく知られている mod_python と Subversion の Python バインディングの他の問題 ([trac:#2611], [trac:#3455]) について推奨しているワークアラウンドです。 [trac:comment:9:ticket:3455 #3455] Graham Dumpleton のコメントに問題点が指摘されています。 
    370352 
    371353=== ページレイアウトの問題 === #Pagelayoutissues 
     
    382364Note: 上記のコンフィグが効果を発揮するためには、プロジェクトの root 位置のコンフィグ後に追加しなければなりません。つまり {{{<Location /myproject />}}} 以降です。 
    383365 
    384 また `PythonOptimize On` が設定されている場合、ページのヘッダとフッタの表示が乱れたり、マクロやプラグインのドキュメンテーションが表示されないことがあります ([http://trac.edgewall.org/ticket/8956 #8956] 参照)。オプションの設定によって影響を受ける箇所について充分考慮できない場合は `Off` に設定する方がよいでしょう。 
     366また `PythonOptimize On` が設定されている場合、ページのヘッダとフッタの表示が乱れたり、マクロやプラグインのドキュメンテーションが表示されないことがあります ([trac:#8956] 参照)。オプションの設定によって影響を受ける箇所について充分考慮できない場合は `Off` に設定する方がよいでしょう。 
    385367 
    386368=== HTTPS の問題 === #HTTPSissues 
     
    397379}}} 
    398380 
    399 === Fedora 7 の問題 === #Fedora7Issues 
    400 必ず 'python-sqlite2' をインストールしてください。 TracModPython では必須です (tracd では必須ではありません)。 
    401  
    402381 
    403382=== php5-mhash または その他の php5 モジュールのセグメンテーションフォルト === #Segmentationfaultwithphp5-mhashorotherphp5modules 
     
    407386 
    408387---- 
    409 See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI],  [http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe] 
     388See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI],  [trac:TracNginxRecipe TracNginxRecipe]