Changes between Initial Version and Version 1 of TracModPython


Ignore:
Timestamp:
Apr 10, 2015, 1:03:53 PM (9 years ago)
Author:
trac
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{{{#!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
     18
     19mod_python をインストールしたら、 Apache の設定ファイルに以下の一行を追加してモジュールをロードしなければなりません:
     20{{{
     21LoadModule python_module modules/mod_python.so
     22}}}
     23
     24''Note: モジュールがインストールされている正しいパスは HTTPD をどこにインストールしたかによって変わります。''
     25
     26Debian で apt-get を使用する場合
     27{{{
     28apt-get install libapache2-mod-python libapache2-mod-python-doc
     29}}}
     30(Debian の続き) mod_python をインストールした後に、apache2 (上の Load Module に相当するもの) のモジュールを有効にしなければなりません :
     31{{{
     32a2enmod python
     33}}}
     34Fedora で yum を使用する場合:
     35{{{
     36yum install mod_python
     37}}}
     38httpd.conf に以下を加えることで、 mod_python がインストールされたかテストすることができます。セキュリティ上の理由から、テストが終わった時点で以下のコンフィグは削除するべきです。 Note: mod_python.testhandler は mod_python 3.2+ で利用可能です。
     39{{{
     40#!xml
     41<Location /mpinfo>
     42   SetHandler mod_python
     43   PythonInterpreter main_interpreter
     44   PythonHandler mod_python.testhandler
     45   Order allow,deny
     46   Allow from all
     47</Location>
     48}}}
     49
     50mod_python を使用した簡単な Trac のセットアップ方法は以下のようになります:
     51{{{
     52#!xml
     53<Location /projects/myproject>
     54   SetHandler mod_python
     55   PythonInterpreter main_interpreter
     56   PythonHandler trac.web.modpython_frontend
     57   PythonOption TracEnv /var/trac/myproject
     58   PythonOption TracUriRoot /projects/myproject
     59   Order allow,deny
     60   Allow from all
     61</Location>
     62}}}
     63
     64'''`TracUriRoot`''' オプションは不要な場合もあります。 `TracUriRoot` オプションを付けずに試し、 Trac が正しく URL を生成できないか、 "No handler matched request to..." というエラーが出るようであれば '''`TracUriRoot`''' を追加して下さい。 `Location` と '''`TracUriRoot`''' が同じパスになるようにしてください。
     65
     66!PythonOption の一覧は以下の通りです。
     67{{{
     68    # For a single project
     69    PythonOption TracEnv /var/trac/myproject
     70
     71    # For multiple projects
     72    PythonOption TracEnvParentDir /var/trac/myprojects
     73
     74    # For the index of multiple projects
     75    PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html
     76
     77    # A space delimitted list, with a "," between key and value pairs.
     78    PythonOption TracTemplateVars key1,val1 key2,val2
     79
     80    # Useful to get the date in the wanted order
     81    PythonOption TracLocale en_GB.UTF8
     82
     83    # See description above
     84    PythonOption TracUriRoot /projects/myproject
     85}}}
     86
     87=== Python Egg Cache === #PythonEggCache
     88
     89Genshi のように圧縮された Python egg は通常、実行するユーザのホームディレクトリ配下の `.python-eggs` ディレクトリに展開されます。  Apache のホームディレクトリは多くの場合、書き込みできないようになっているので、他のディレクトリを egg cache として指定しなければなりません:
     90{{{
     91PythonOption PYTHON_EGG_CACHE /var/trac/myprojects/egg-cache
     92}}}
     93
     94又は Genshi の egg を解凍して展開することで、この問題を回避できます。
     95
     96=== 認証設定 === #ConfiguringAuthentication
     97
     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>
     137  SetHandler mod_python
     138  PythonInterpreter main_interpreter
     139  PythonHandler trac.web.modpython_frontend
     140  PythonOption TracEnvParentDir /var/trac
     141  PythonOption TracUriRoot /projects
     142</Location>
     143}}}
     144
     145`/projects` の URL をリクエストすると、 TracEnvironment の親ディレクトリ `TracEnvParentDir` として設定したディレクトリ配下のサブディレクトリ一覧が表示されます。その一覧から何かプロジェクトを選択するとそれに該当する TracEnvironment を開くことができます。
     146
     147あなたのプロジェクトのホームページとして、サブディレクトリのリストが必要ないならば、以下のようにすることができます
     148{{{
     149#!xml
     150<LocationMatch "/.+/">
     151}}}
     152
     153これは !DocumentRoot フォルダの直下にカスタムホームページとして配置されていない場合には、すべてのロケーションで代わりに mod_python を使用することを Apache に教えます。
     154
     155すべてのプロジェクトに対して、 `<LocationMatch>` ディレクティブを使用することによって同じ認証の仕組みを使用することができます。
     156{{{
     157#!xml
     158<LocationMatch "/projects/[^/]+/login">
     159  AuthType Basic
     160  AuthName "Trac"
     161  AuthUserFile /var/trac/.htpasswd
     162  Require valid-user
     163</LocationMatch>
     164}}}
     165
     166=== 仮想ホストの設定 === #VirtualHostConfiguration
     167
     168以下に示す例は Trac を仮想サーバーとしてセットアップするときに必要な設定です。 (例えば、!http://trac.mycompany.com といった
     169URL でアクセスすることができます):
     170
     171{{{
     172#!xml
     173<VirtualHost * >
     174    DocumentRoot /var/www/myproject
     175    ServerName trac.mycompany.com
     176    <Location />
     177        SetHandler mod_python
     178        PythonInterpreter main_interpreter
     179        PythonHandler trac.web.modpython_frontend
     180        PythonOption TracEnv /var/trac/myproject
     181        PythonOption TracUriRoot /
     182    </Location>
     183    <Location /login>
     184        AuthType Basic
     185        AuthName "MyCompany Trac Server"
     186        AuthUserFile /var/trac/myproject/.htpasswd
     187        Require valid-user
     188    </Location>
     189</VirtualHost>
     190}}}
     191
     192この設定は全てのケースでうまく動くわけではありません。動かない場合は以下を試してください:
     193 * `<Location>` の代わりに `<LocationMatch>` を使用する
     194 * <Location />  はサーバの設定によっては、単にサーバのルートではなく完全なホスト名を参照していることがあります。このような場合、 (上記の例では下段にあたるログイン用ディレクトリを含む) 全てのリクエストが Python に送信され、認証が動かなくなります (認証を行おうとすると、認証が設定されていないというエラー画面が表示されます)。 URL を変更できるのであれば (/, /login の代わりに /web/, /web/login などのように) ルートではなくサブディレクトリを使ってみてください
     195 * Apache の `NameVirtualHost` を設定している場合、 `<VirtualHost *>` ではなく `<VirtualHost *:80>` を使用せねばならないかもしれません
     196
     197複数のプロジェクトをサポートする仮想ホストの設定では、 "`TracEnv`" /var/trac/myproject を "`TracEnvParentDir`" /var/trac/ に置き換えて下さい。
     198
     199Note: !DocumentRoot は TracEnvironment と同じディレクトリにしないでください。 何かのバグがあった場合に TracEnvironment の内容が外部からアクセス可能になってしまうおそれがあります。
     200
     201== トラブルシューティング == #Troubleshooting
     202
     203サーバエラーのページがでたときには、 まずは Apache のエラーログを確認するか、 `PythonDebug` オプションを有効にして下さい:
     204{{{
     205#!xml
     206<Location /projects/myproject>
     207  ...
     208  PythonDebug on
     209</Location>
     210}}}
     211
     212複数プロジェクトの場合は、全てのプロジェクトでサーバを再起動してみてください。
     213
     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
     247
     248この問題は Unix 上で Python 2.4 を使用するとき、ほぼ確実に発生します。
     249Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と
     250Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。
     251Trac 0.11 は Genshi (間接的に Expat が使用される) を使用しているため、
     252以前 Trac 0.10 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。
     253
     254Graham Dumpleton が、この問題について詳しく書いています。問題の [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash 説明と回避方法] を確認してください。
     255
     256=== フォームを送信するときの問題 === #Formsubmissionproblems
     257
     258もし、 Trac で何かしらのフォームを送信したときに、トラブルに見舞われたら (送信後にスタートページにリダイレクトされてしまう、などがよくある問題です)  {{{DocumentRoot}}} の中に mod_python をマッピングしたパスと同じフォルダやファイルが存在しないか確認してください。どういうわけか、 mod_python は静的リソースと同じところにマッピングされると混乱してしまいます。
     259
     260=== 仮想ホストの設定においての問題 === #Problemwithvirtualhostconfiguration
     261
     262<Location /> ディレクティブが使用されている場合に `DocumentRoot` を設定すると ''403 (Forbidden)'' エラーになることがあります。 `DocumentRoot` ディレクティブを削除するか、アクセスが許されているディレクトリに設定されているかどうかを確認して下さい (対応する `<Directory>` ブロックにて)
     263
     264<Location /> で `SetHandler` を使用すると、すべてを mod_python でハンドルすることになりますが、いかなる CSS も image/icons もダウンロードできなくなります。この問題を回避するために、われわれは <Location /trac> で `SetHandler None` を使用しています。しかし、この方法がエレガントな解決方法だとは思っていません。
     265
     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
     274=== .htaccess ファイルを使用する === #Using.htaccess
     275
     276ディレクトリの設定をほんのちょっと修正するには `.htaccess` ファイルを使用すればいいかもしれませんが、これは動作しません。 Apache が Trac の URL に "/" (スラッシュ) を追加すると、正しい動作を妨げてしまいます。
     277
     278それでは、 mod_rewrite を使用すればいいように見えますが、これも動作しません。とにかく、百害あって一利なしです。指示に従ってください。 :)
     279
     280成功した事例:  以下の設定値で成功した事例があります:
     281{{{#!xml
     282SetHandler mod_python
     283PythonInterpreter main_interpreter
     284PythonHandler trac.web.modpython_frontend
     285PythonOption TracEnv /system/path/to/this/directory
     286PythonOption TracUriRoot /path/on/apache
     287
     288AuthType Basic
     289AuthName "ProjectName"
     290AuthUserFile /path/to/.htpasswd
     291Require valid-user
     292}}}
     293
     294`TracUriRoot` は Web ブラウザが取得する Trac のパスを明示的に設定するのに使用します。 (例: domain.tld/projects/trac)
     295
     296=== .htaccess 使用時の特記事項 === #Additional.htaccesshelp
     297
     298.htaccess を使用している場合、 Trac のディレクトリが他のディレクトリで設定されたた .htaccess ディレクティブを継承し、問題を生じることがあります。このような場合、以下のように .htaccess ファイルに設定してみて下さい:
     299
     300{{{
     301<IfModule mod_rewrite.c>
     302  RewriteEngine Off
     303</IfModule>
     304}}}
     305
     306=== 特定のプラットフォームでの問題 === #Platformspecificissues
     307==== Win32 での問題 ==== #Win32issues
     308Windows 上で mod_python 3.2 より前のバージョンで Trac を動かしている場合、添付ファイルのアップロードが '''動かない''' でしょう。この問題は 3.1.4 以降で解決されました。 mod_python をアップグレードしてこの問題を解決してください。
     309
     310
     311==== OS X での問題 ==== #OSXissues
     312
     313OS X で mod_python を使用するとき、 `apachectl restart` コマンドで Apache の再起動ができないでしょう。これは、 mod_python 3.2 でおそらく修正されるでしょう。しかし、 [http://www.dscpl.com.au/projects/vampire/patches.html ここ] にあるパッチを適用すれば、 3.2 以前のバージョンでもこの問題を回避できます。
     314
     315==== SELinux での問題 ==== #SELinuxissues
     316
     317もし、 Trac が ''Cannot get shared lock on db.lock'' というようなメッセージが出力したら、
     318リポジトリに セキュリティコンテキストを設定する必要があるでしょう:
     319
     320{{{
     321chcon -R -h -t httpd_sys_content_t PATH_TO_REPOSITORY
     322}}}
     323
     324[http://subversion.tigris.org/faq.html#reposperms] も参考にして下さい
     325
     326==== FreeBSD での問題 ==== #FreeBSDissues
     327mod_python と sqlite パッケージのインストールバージョンに注意して下さい。 Ports には両パッケージともいろいろなバージョンがありますが、初期の pysqlite と mod_python は組み合わせることができません。前者は python のスレッド機能サポートが必要ですし、 後者 は python のスレッド機能なしのインストールが必要です。
     328
     329apache2 を普通にコンパイルしてインストールした場合、 apache はスレッドのサポートなしになります (これが FreeBSD 上であまりよく動かない原因)。 --enable-threads を使用して ./configure を実行することで apache にスレッドのサポートありにすることができますが、これはお勧めできません。
     330最良のオプションは /usr/local/apache2/bin/ennvars に下記の一行を追加することだと [http://modpython.org/pipermail/mod_python/2006-September/021983.html 考えられます。]
     331
     332{{{
     333export LD_PRELOAD=/usr/lib/libc_r.so
     334}}}
     335
     336
     337==== Fedora 7 での問題 ==== #Fedore7Issues
     338'python-sqlite2' を必ずインストールしてください。tracd では必須ではありませんが、 TracModPython では必須です。
     339
     340
     341=== Subversion での問題 === #Subversionissues
     342
     343コマンドラインや TracStandalone で使用しているときは動くのに、 mod_python を使用しているときのみ、 `Unsupported version control system "svn"` というエラーが出力される場合、 [wiki:"TracModPython#SettingthePythonPath" PythonPath] ディレクティブに Python bindings へのパスを追加するのを忘れている可能性があります。 (Python の `site-packages` ディレクトリに Python binding へのリンクを追加するか、 `.pth` ファイルを作っておくのがベターです。)
     344
     345これに当てはまらない場合、使用している Subversion のライブラリが Apache が使用しているバージョンと適合性がないかもしれません。 (たいてい `apr` ライブラリの不適合性が原因になります。) その場合、 Apache の svn モジュール (`mod_dav_svn`) も使用できないでしょう。
     346
     347また、ランタイムエラー ({{{argument number 2: a 'apr_pool_t *' is expected}}}) を抑止するためにも、複数のサブインタプリタを使用できる最近のバージョンの `mod_python` が必要になります。 3.2.8 では ''たぶん'' 動きますが、 [trac:#3371] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう:
     348{{{
     349PythonInterpreter main_interpreter
     350}}}
     351これは、よく知られている mod_python と Subversion の Python バインディングの他の問題 ([trac:#2611], [trac:#3455]) について推奨しているワークアラウンドです。 [trac:comment:9:ticket:3455 #3455] Graham Dumpleton のコメントに問題点が指摘されています。
     352
     353=== ページレイアウトの問題 === #Pagelayoutissues
     354
     355Trac のページフォーマットが奇妙に見えるなら、ページレイアウトを管理するスタイルシートが Web サーバによって適切に扱われていない可能性が考えられます。 Apache のコンフィグに以下を追加してみてください:
     356{{{
     357#!xml
     358Alias /myproject/css "/usr/share/trac/htdocs/css"
     359<Location /myproject/css>
     360    SetHandler None
     361</Location>
     362}}}
     363
     364Note: 上記のコンフィグが効果を発揮するためには、プロジェクトの root 位置のコンフィグ後に追加しなければなりません。つまり {{{<Location /myproject />}}} 以降です。
     365
     366また `PythonOptimize On` が設定されている場合、ページのヘッダとフッタの表示が乱れたり、マクロやプラグインのドキュメンテーションが表示されないことがあります ([trac:#8956] 参照)。オプションの設定によって影響を受ける箇所について充分考慮できない場合は `Off` に設定する方がよいでしょう。
     367
     368=== HTTPS の問題 === #HTTPSissues
     369
     370Trac を完全に https で実行したいにも関わらず、プレーンな http にリダイレクトされる場合、 Apache のコンフィグに以下を追加してください:
     371{{{
     372#!xml
     373<VirtualHost * >
     374    DocumentRoot /var/www/myproject
     375    ServerName trac.mycompany.com
     376    SetEnv HTTPS 1
     377    ....
     378</VirtualHost>
     379}}}
     380
     381
     382=== php5-mhash または その他の php5 モジュールのセグメンテーションフォルト === #Segmentationfaultwithphp5-mhashorotherphp5modules
     383php5-mhash モジュールがインストールされている場合、 (debian etch について報告された) セグメンテーションフォルトに遭遇するでしょう。 php-mhash を削除して、問題が解決するかを確かめてみてください。 debian のバグレポート [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411487] を参考にして下さい。
     384
     385システムライブラリの代わりに、サードパーティのライブラリでコンパイルされた php5 を使用する一部の人々にもトラブルが発生します。ここを確認してください [http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault]
     386
     387----
     388See also:  TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI],  [trac:TracNginxRecipe TracNginxRecipe]