Changes between Version 1 and Version 2 of TracModPython


Ignore:
Timestamp:
Aug 13, 2014, 12:08:18 AM (10 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracModPython

    v1 v2  
    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 == シンプルなコンフィグレーション == #Simpleconfiguration
     6{{{#!div class="important"
     7** A Word of Warning **
     8
     92010 年 6 月 16 日に、 mod_python プロジェクトが正式に終了しました。もし mod_python を新しいインストールで使用することを考えているならば、 '''お願いだからしないで下さい'''! 解決されない既知の課題がありますし、今ではより良い代替手段もあります。詳細については、インストールしようとしているバージョンの TracInstall ページをチェックして下さい。
     10}}}
     11
     12
     13以下の説明は Apache2 のためのものです; まだ Apache1.3 を使用しているなら、 [trac:TracModPython2.7 TracModPython2.7] にいくつか情報がありますが、すべてあなた一人で設定することになるでしょう。
     14
     15[[PageOutline(2-3,Overview,inline)]]
     16
     17== シンプルな設定: 単一プロジェクト == #Simpleconfiguration
    918
    1019mod_python をインストールしたら、 Apache の設定ファイルに以下の一行を追加してモジュールをロードしなければなりません:
     
    2130(Debian の続き) mod_python をインストールした後に、apache2 (上の Load Module に相当するもの) のモジュールを有効にしなければなりません :
    2231{{{
    23 a2enmod mod_python
     32a2enmod python
    2433}}}
    2534Fedora で yum を使用する場合:
     
    3443   PythonInterpreter main_interpreter
    3544   PythonHandler mod_python.testhandler
     45   Order allow,deny
     46   Allow from all
    3647</Location>
    3748}}}
     
    4354   SetHandler mod_python
    4455   PythonInterpreter main_interpreter
    45    PythonHandler trac.web.modpython_frontend 
     56   PythonHandler trac.web.modpython_frontend
    4657   PythonOption TracEnv /var/trac/myproject
    4758   PythonOption TracUriRoot /projects/myproject
     59   Order allow,deny
     60   Allow from all
    4861</Location>
    4962}}}
     
    5568    # For a single project
    5669    PythonOption TracEnv /var/trac/myproject
     70
    5771    # For multiple projects
    5872    PythonOption TracEnvParentDir /var/trac/myprojects
     73
    5974    # For the index of multiple projects
    6075    PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html
     76
    6177    # A space delimitted list, with a "," between key and value pairs.
    6278    PythonOption TracTemplateVars key1,val1 key2,val2
     79
    6380    # Useful to get the date in the wanted order
    6481    PythonOption TracLocale en_GB.UTF8
    65     # See description above       
     82
     83    # See description above
    6684    PythonOption TracUriRoot /projects/myproject
    6785}}}
     
    7492}}}
    7593
    76 または Genshi の egg を解凍して展開することで、この問題を回避できます。
     94又は Genshi の egg を解凍して展開することで、この問題を回避できます。
     95
    7796=== 認証設定 === #ConfiguringAuthentication
    7897
    79 パスワードファイルを作成して、認証を構成するには [wiki:TracCgi#AddingAuthentication CGI] と同じように行います。
    80 {{{
    81 #!xml
    82 <Location /projects/myproject/login>
    83   AuthType Basic
    84   AuthName "myproject"
    85   AuthUserFile /var/trac/myproject/.htpasswd
    86   Require valid-user
    87 </Location>
    88 }}}
    89 
    90 Apache の mod_ldap 認証のコンフィグは少し扱いにくいです。(httpd 2.2.x と OpenLDAP: slapd 2.3.19)
    91 
    92 1. Apache の httpd.conf に以下のモジュールをロードする必要があります
    93 {{{
    94 LoadModule ldap_module modules/mod_ldap.so
    95 LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    96 }}}
    97 
    98 2. httpd.conf は以下のような感じになります:
    99 
    100 {{{
    101 #!xml
    102 <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>
    103137  SetHandler mod_python
    104138  PythonInterpreter main_interpreter
    105139  PythonHandler trac.web.modpython_frontend
    106   PythonOption TracEnv /home/trac/
    107   PythonOption TracUriRoot /trac/
    108   Order deny,allow
    109   Deny from all
    110   Allow from 192.168.11.0/24
    111   AuthType Basic
    112   AuthName "Trac"
    113   AuthBasicProvider "ldap"
    114   AuthLDAPURL "ldap://127.0.0.1/dc=example,dc=co,dc=ke?uid?sub?(objectClass=inetOrgPerson)"
    115   authzldapauthoritative Off
    116   require valid-user
    117 </Location>
    118 }}}
    119 
    120 Microsoft Active Directory の LDAP インタフェースを使用する場合:
    121 
    122 {{{
    123 #!xml
    124 <Location /trac/>
    125   SetHandler mod_python
    126   PythonInterpreter main_interpreter
    127   PythonHandler trac.web.modpython_frontend
    128   PythonOption TracEnv /home/trac/
    129   PythonOption TracUriRoot /trac/
    130   Order deny,allow
    131   Deny from all
    132   Allow from 192.168.11.0/24
    133   AuthType Basic
    134   AuthName "Trac"
    135   AuthBasicProvider "ldap"
    136   AuthLDAPURL "ldap://adserver.company.com:3268/DC=company,DC=com?sAMAccountName?sub?(objectClass=user)"
    137   AuthLDAPBindDN       ldap-auth-user@company.com
    138   AuthLDAPBindPassword "the_password"
    139   authzldapauthoritative Off
    140   # require valid-user
    141   require ldap-group CN=Trac Users,CN=Users,DC=company,DC=com
    142 </Location>
    143 }}}
    144 
    145 Note 1: このケースでは LDAP 検索で複数の OU をまとめて取得するために、 AD のグローバルカタログサーバ (Global Catalog Server) に接続しています (ポート番号が通常 LDAP で使用される 389 ではなく 3268 であることに注意してください) 。 GCS は基本的に "平らな" ツリーであり、ユーザが、どの OU に属するか不明な場合でも検索することができます。
    146 
    147 Note 2: Active Directory は、レコードにアクセスするために user/password (AuthLDAPBindDN と AuthLDAPBindPassword) による認証を必要とします。 (訳注: GC ではなく、通常の LDAP であれば Active Directory の ACL に認証なしユーザからの読み取り許可を設定すれば不要です)
    148 
    149 Note 3: "require ldap-group ..." ディレクティブはメンバのアクセスが許可されている AD のグループを指定します。
    150 
    151 
    152 === Python Egg Cache を設定する === #SettingthePythonEggCache
    153 
    154 Web サーバが Egg Cache に書き込みできない場合、パーミッションを変更するか、 Apache が書き込み可能な場所を指定する必要があります。設定しないと ''500 Internal Server Error'' や syslog へのエラー出力が発生します。
    155 
    156 {{{
    157 #!xml
    158 <Location /projects/myproject>
    159   ...
    160   PythonOption PYTHON_EGG_CACHE /tmp
    161   ...
    162 </Location>
    163 }}}
    164 
    165 
    166 === !PythonPath を設定する === #SettingthePythonPath
    167 
    168 もし Trac のインストールが、通常の Python ライブラリのパスの中に無い場合、 Apache が Trac の mod_python ハンドラを見つけられるように `PythonPath` ディレクティブで指定しなければなりません:
    169 {{{
    170 #!xml
    171 <Location /projects/myproject>
    172   ...
    173   PythonPath "sys.path + ['/path/to/trac']"
    174   ...
    175 </Location>
    176 }}}
    177 
    178 !PythonPath ディレクティブを使用するときは気をつけてください。そして、 `SetEnv PYTHONPATH` は動かないので ''使用しない'' で下さい。
    179 
    180 == マルチプロジェクトのセットアップ == #Settingupmultipleprojects
    181 
    182 Trac の mod_python ハンドラには Subversion の `SvnParentPath` とよく似た `TracEnvParentDir` というコンフィグレーションオプションがあります。
    183 {{{
    184 #!xml
    185 <Location /projects>
    186   SetHandler mod_python
    187   PythonInterpreter main_interpreter
    188   PythonHandler trac.web.modpython_frontend
    189140  PythonOption TracEnvParentDir /var/trac
    190141  PythonOption TracUriRoot /projects
     
    213164}}}
    214165
    215 == 仮想ホストの設定 == #VirtualHostConfiguration
     166=== 仮想ホストの設定 === #VirtualHostConfiguration
    216167
    217168以下に示す例は Trac を仮想サーバーとしてセットアップするときに必要な設定です。 (例えば、!http://trac.mycompany.com といった
     
    240191
    241192この設定は全てのケースでうまく動くわけではありません。動かない場合は以下を試してください:
    242  * `<Location>` の代わりに `<LocationMatch>` を使用する
    243  * <Location />  はサーバの設定によっては、単にサーバのルートではなく完全なホスト名を参照していることがあります。このような場合、 (上記の例では下段にあたるログイン用ディレクトリを含む) 全てのリクエストが Python に送信され、認証が動かなくなります (認証を行おうとすると、認証が設定されていないというエラー画面が表示されます)。 URL を変更できるのであれば (/, /login の代わりに /web/, /web/login などのように) ルートではなくサブディレクトリを使ってみてください
    244  * Apache の `NameVirtualHost` を設定している場合、 `<VirtualHost *>` ではなく `<VirtualHost *:80>` を使用せねばならないかもしれません
     193 * `<Location>` の代わりに `<LocationMatch>` を使用する
     194 * <Location />  はサーバの設定によっては、単にサーバのルートではなく完全なホスト名を参照していることがあります。このような場合、 (上記の例では下段にあたるログイン用ディレクトリを含む) 全てのリクエストが Python に送信され、認証が動かなくなります (認証を行おうとすると、認証が設定されていないというエラー画面が表示されます)。 URL を変更できるのであれば (/, /login の代わりに /web/, /web/login などのように) ルートではなくサブディレクトリを使ってみてください
     195 * Apache の `NameVirtualHost` を設定している場合、 `<VirtualHost *>` ではなく `<VirtualHost *:80>` を使用せねばならないかもしれません
    245196
    246197複数のプロジェクトをサポートする仮想ホストの設定では、 "`TracEnv`" /var/trac/myproject を "`TracEnvParentDir`" /var/trac/ に置き換えて下さい。
     
    261212複数プロジェクトの場合は、全てのプロジェクトでサーバを再起動してみてください。
    262213
    263 === 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
    264247
    265248この問題は Unix 上で Python 2.4 を使用するとき、ほぼ確実に発生します。
    266 Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。
    267 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 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。
    268253
    269254Graham Dumpleton が、この問題について詳しく書いています。問題の [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash 説明と回避方法] を確認してください。
     
    279264<Location /> で `SetHandler` を使用すると、すべてを mod_python でハンドルすることになりますが、いかなる CSS も image/icons もダウンロードできなくなります。この問題を回避するために、われわれは <Location /trac> で `SetHandler None` を使用しています。しかし、この方法がエレガントな解決方法だとは思っていません。
    280265
     266=== Zip された egg での問題 === #Problemwithzippedegg
     267
     268mod_python のバージョンによっては Zip された egg ファイルからモジュールを import できないことがあります。 Apache のログに `ImportError: No module named trac` が出力される場合、問題が発生している原因であると考えられます。 Python の site-packages ディレクトリを見てみてください。 Trac のモジュールが ''ディレクトリ'' ではなく ''ファイル'' として配置されている場合、問題の原因と考えられます。解決するためには、下記の上に `--always-unzip` オプションと伴に Trac をインストールしてみてください。
     269
     270{{{
     271easy_install --always-unzip Trac-0.12.zip
     272}}}
     273
    281274=== .htaccess ファイルを使用する === #Using.htaccess
    282275
     
    286279
    287280成功した事例:  以下の設定値で成功した事例があります:
    288 {{{
     281{{{#!xml
    289282SetHandler mod_python
    290283PythonInterpreter main_interpreter
    291 PythonHandler trac.web.modpython_frontend 
     284PythonHandler trac.web.modpython_frontend
    292285PythonOption TracEnv /system/path/to/this/directory
    293286PythonOption TracUriRoot /path/on/apache
     
    311304}}}
    312305
    313 
    314 === Win32 での特記 === #Win32Issues
     306=== 特定のプラットフォームでの問題 === #Platformspecificissues
     307==== Win32 での問題 ==== #Win32issues
    315308Windows 上で mod_python 3.2 より前のバージョンで Trac を動かしている場合、添付ファイルのアップロードが '''動かない''' でしょう。この問題は 3.1.4 以降で解決されました。 mod_python をアップグレードしてこの問題を解決してください。
    316309
    317310
    318 === OS X での特記 === #OSXissues
     311==== OS X での問題 ==== #OSXissues
    319312
    320313OS X で mod_python を使用するとき、 `apachectl restart` コマンドで Apache の再起動ができないでしょう。これは、 mod_python 3.2 でおそらく修正されるでしょう。しかし、 [http://www.dscpl.com.au/projects/vampire/patches.html ここ] にあるパッチを適用すれば、 3.2 以前のバージョンでもこの問題を回避できます。
    321314
    322 === SELinux での特記 === #SELinuxissues
     315==== SELinux での問題 ==== #SELinuxissues
    323316
    324317もし、 Trac が ''Cannot get shared lock on db.lock'' というようなメッセージが出力したら、
     
    331324[http://subversion.tigris.org/faq.html#reposperms] も参考にして下さい
    332325
    333 === FreeBSD での特記 === #FreeBSDissues
     326==== FreeBSD での問題 ==== #FreeBSDissues
    334327mod_python と sqlite パッケージのインストールバージョンに注意して下さい。 Ports には両パッケージともいろいろなバージョンがありますが、初期の pysqlite と mod_python は組み合わせることができません。前者は python のスレッド機能サポートが必要ですし、 後者 は python のスレッド機能なしのインストールが必要です。
    335328
     
    341334}}}
    342335
    343 === Subversion での特記 === #Subversionissues
     336
     337==== Fedora 7 での問題 ==== #Fedore7Issues
     338'python-sqlite2' を必ずインストールしてください。tracd では必須ではありませんが、 TracModPython では必須です。
     339
     340
     341=== Subversion での問題 === #Subversionissues
    344342
    345343コマンドラインや TracStandalone で使用しているときは動くのに、 mod_python を使用しているときのみ、 `Unsupported version control system "svn"` というエラーが出力される場合、 [wiki:"TracModPython#SettingthePythonPath" PythonPath] ディレクティブに Python bindings へのパスを追加するのを忘れている可能性があります。 (Python の `site-packages` ディレクトリに Python binding へのリンクを追加するか、 `.pth` ファイルを作っておくのがベターです。)
     
    347345これに当てはまらない場合、使用している Subversion のライブラリが Apache が使用しているバージョンと適合性がないかもしれません。 (たいてい `apr` ライブラリの不適合性が原因になります。) その場合、 Apache の svn モジュール (`mod_dav_svn`) も使用できないでしょう。
    348346
    349 また、ランタイムエラー ({{{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] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう:
    350348{{{
    351349PythonInterpreter main_interpreter
    352350}}}
    353 これは、よく知られている 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 のコメントに問題点が指摘されています。
    354352
    355353=== ページレイアウトの問題 === #Pagelayoutissues
     
    365363
    366364Note: 上記のコンフィグが効果を発揮するためには、プロジェクトの root 位置のコンフィグ後に追加しなければなりません。つまり {{{<Location /myproject />}}} 以降です。
     365
     366また `PythonOptimize On` が設定されている場合、ページのヘッダとフッタの表示が乱れたり、マクロやプラグインのドキュメンテーションが表示されないことがあります ([trac:#8956] 参照)。オプションの設定によって影響を受ける箇所について充分考慮できない場合は `Off` に設定する方がよいでしょう。
    367367
    368368=== HTTPS の問題 === #HTTPSissues
     
    379379}}}
    380380
    381 === Fedora 7 の問題 === #Fedora7Issues
    382 必ず 'python-sqlite2' をインストールしてください。 TracModPython では必須です (tracd では必須ではありません)。
    383 
    384381
    385382=== php5-mhash または その他の php5 モジュールのセグメンテーションフォルト === #Segmentationfaultwithphp5-mhashorotherphp5modules
     
    389386
    390387----
    391 See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI], [wiki:TracModPython ModPython], [http://trac.edgewall.org/wiki/TracNginxRecipe TracNginxRecipe]
     388See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI],  [trac:TracNginxRecipe TracNginxRecipe]