Changes between Version 1 and Version 2 of TracPlugins


Ignore:
Timestamp:
May 13, 2012, 9:15:45 PM (13 years ago)
Author:
trac
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TracPlugins

    v1 v2  
    1 = Trac プラグイン =
     1= Trac プラグイン = #TracPlugins
    22[[TracGuideToc]]
    33
    4 バージョン 0.9 以降、 Trac はプラグイン機能に対応し、組み込み機能を拡張できるようになりました。プラグインの機能は [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture コンポーネント設計] に基づいています。
     4Trac はバージョン 0.9 以降で [http://trac.edgewall.org/wiki/PluginList プラグイン機能] による機能拡張が可能です。プラグイン機能は、 [http://trac.edgewall.org/wiki/TracDev/ComponentArchitecture コンポーネント設計] に基づき、 [http://trac.edgewall.org/wiki/TracDev/PluginDevelopment プラグインの開発] ページに記載されているような特性を持っています。
    55
    6 == 必要条件 ==
     6== プラグインを見つける == #Plugindiscovery
    77
    8 Python egg が基になっている Trac のプラグインを使用するためには、 [http://peak.telecommunity.com/DevCenter/setuptools setuptools] (バージョン 0.6) をインストールしなければなりません
     8ユーザの視点からいうと、プラグインはスタンドアロンの .py ファイルか .egg パッケージのどちらかです。 Trac は グローバルで共有するプラグインのディレクトリ ([TracIni#GlobalConfiguration グローバルな設定] 参照) とローカルの TracEnviroment の `plugins` ディレクトリに対して、プラグインを探します。グローバルにインストールされているプラグインを定義するコンポーネントは trac.ini ファイルの [[TracIni#components-section| [components] ]] セクションで明確に有効にするべきです
    99
    10 プラグインは単一の `.py` ファイルから成り立っていて、各 TracEnvironment かグローバルの `plugin` ディレクトリに配置します。 ''([http://trac.edgewall.org/milestone/0.10 milestone:0.10] 以降)''
     10== Trac eggs ファイルにおける必要条件 == #RequirementsforTraceggs
     11
     12Trac で Python-egg ベースのプラグインを使用するためには、 [http://peak.telecommunity.com/DevCenter/setuptools setuptools] (バージョン 0.6) をインストールしなければなりません。
    1113
    1214`setuptools` をインストールするために、ブートストラップモジュールである [http://peak.telecommunity.com/dist/ez_setup.py ez_setup.py] をダウンロードし、以下に示すように実行して下さい:
     
    1719もし `ez_setup.py` スクリプトが setuptools のインストールに失敗したら、 [http://www.python.org/pypi/setuptools PyPI] をダウンロードして手動でインストールしてください。
    1820
    19 == Trac プラグインのインストール ==
     21また、単一の `.py` ファイルで成り立つプラグインは、各 TracEnvironment のルートディレクトリかグローバルの `plugins` ディレクトリに配置します。
    2022
    21 === 単一のプロジェクト ===
     23== Trac プラグインのインストール == #InstallingaTracPlugin
    2224
    23 プラグインは [http://peak.telecommunity.com/DevCenter/PythonEggs Python eggs] としてパッケージ化されています。つまり、拡張子が `.egg` となっている ZIP アーカイブのファイルです。プラグインのソースコードディストリビューションをダウンロードした場合は、以下のコマンドを実行して下さい:
     25=== 単一のプロジェクト === #ForaSingleProject
     26
     27プラグインは [http://peak.telecommunity.com/DevCenter/PythonEggs Python eggs] としてパッケージ化されています。つまり、拡張子が `.egg` となっている ZIP アーカイブのファイルです。
     28
     29plugin のディストリビューションをダウンロードして `.egg` ファイルをビルドしたいのであれば、以下の通りにして下さい:
     30 * ソースをアンパックして下さい。それにより setup.py が提供されるでしょう。
     31 * 以下のようにして実行してください:
    2432{{{
    2533$ python setup.py bdist_egg
    2634}}}
    27 `.egg` ファイルをビルドできます。
    2835
    29 一度、プラグインアーカイブを作成したら、 [wiki:TracEnvironment TracEnvironment] の `plugins` ディレクトリにコピーする必要があります。また、 Web サーバーが egg プラグインを読み取るのに必要なパーミッションをつけてください。
     36*.egg ファイルが出力されているでしょう。実行した python の出力を調べて .egg ファイルがどこに作成されたか見つけてください。
     37
     38一度、プラグインアーカイブを作成したら、 [wiki:TracEnvironment TracEnvironment] の `plugins` ディレクトリにコピーする必要があります。また、 Web サーバーが egg プラグインを読み取るのに必要なパーミッションをつけてください。必要に応じて Web サーバを再起動してください。
     39
     40この方法でインストールしたプラグインをアンインストールする場合、 `plugins` ディレクトリから egg を削除し、 Web サーバを再起動してください。
    3041
    3142Python egg をビルドするための Python のバージョンと
    3243Trac を動かしている Python のバージョンが一致しなければなりません。
    33 例えば、 Trac を Python のバージョン 2.3 以前で動かしていて、
    34 2.4 にアップグレードしたときに、
     44例えば、 Trac を Python のバージョン 2.5 以前で動かしていて、
     452.6 にアップグレードしたときに、
    3546Python egg は認識されなくなるでしょう。
    3647
    37 === すべてのプロジェクト ===
     48マルチプロジェクトを設定している場合、 Python インタプリタインスタンスのプールはプロジェクトの必要に応じて動的にアロケートされ、プラグインは Pyhton のモジュールシステムの一定の位置を占有しますので、最初にロードされたバージョンのプラグインが、他のすべてのプロジェクトでも使用されます。言い換えれば、マルチプロジェクトセットアップされたプロジェクト間では、あるプラグインの異なるバージョンを使用することはできません。プラグインは (下記の方法で) すべてのプロジェクト向けにインストールし、個々のプロジェクトで有効/無効を設定する方が安全でしょう。
    3849
    39 ==== 単一の .egg ファイル ====
     50=== すべてのプロジェクト === #ForAllProjects
    4051
    41 いくつかのプラグイン (例えば [http://trac.edgewall.org/wiki/WebAdmin WebAdmin]) は `.egg` ファイルとしてダウンロードし、 `easy_install` プログラムでインストールすることができます:
     52==== 単一の .egg ファイル ==== #Withan.eggfile
     53
     54いくつかのプラグイン (例えば [http://trac.edgewall.org/wiki/SpamFilter SpamFilter]) は `.egg` ファイルとしてダウンロードし、 `easy_install` プログラムでインストールすることができます:
    4255{{{
    43 easy_install TracWebAdmin-0.1.1dev_r2765-py2.3.egg
     56easy_install TracSpamFilter
    4457}}}
    4558
    46 もし、システムに `easy_install` がなくてプラグインをインストールするには上記の必要条件のセクションを見て下さい。 Windows ユーザは `Scripts` ディレクトリを Python をインストールしたディレクトリ (例えば、 `C:\Python23\Scripts`) を環境変数 `PATH` に加えなければなりません。 (より詳しい情報は、 [http://peak.telecommunity.com/DevCenter/EasyInstall#windows-notes easy_install の Windows Notes] を参照して下さい。)
     59もし、システムに `easy_install` がなくてプラグインをインストールするには上記の必要条件のセクションを見て下さい。 Windows ユーザは `Scripts` ディレクトリを Python をインストールしたディレクトリ (例えば、 `C:\Python24\Scripts`) を環境変数 `PATH` に加えなければなりません。 (より詳しい情報は、 [http://peak.telecommunity.com/DevCenter/EasyInstall#windows-notes easy_install の Windows Notes] を参照して下さい。)
    4760
    48 zipで固められた Python egg をインストールし、 Web サーバに Python egg のキャッシュディレクトリに書き込み権限をつけているのにも関わらず、 Trac がパーミッションエラーを出したら、 解凍した Python egg を単に置き直すことによって回避できます。 `easy_install` に `--always-unzip` オプションを付けるだけです:
     61Zip で固められた Python egg をインストールし、 Web サーバに Python egg のキャッシュディレクトリに書き込み権限をつけているのにも関わらず、 Trac がパーミッションエラーを出したら、解凍した Python egg を単に置き直すことによって回避できます。 `easy_install` に `--always-unzip` オプションを付けるだけです:
    4962{{{
    50 easy_install --always-unzip TracWebAdmin-0.1.1dev_r2765-py2.3.egg
     63easy_install --always-unzip TracSpamFilter-0.4.1_r10106-py2.6.egg
    5164}}}
    5265zip で固められた Python egg ファイルと同じ名前のディレクトリ (拡張子が `.egg` で終わっているもの) ができ、そのなかに解凍した中身が入っているでしょう。
    5366
    54 Trac はまた `$prefix/share/trac/plugins` 配下に、グローバルにインストールされたプラグインを検索します ''(0.10 以降)''
     67Trac はまた、 Environment 共通の plugins ディレクトリにインストールされたプラグインを検索します ''(0.10 以降)''。 TracIni#GlobalConfiguration を参照してください。この方法は複数の (しかし全てではない) Environment にまたがってプラグインをインストールする最も簡単な方法になります
    5568
    56 ==== ソースから ====
     69==== ソースから ==== #Fromsource
    5770
    58 Subversion からダウンロードしたプラグインのソースや zip で固められたソースファイルはソース中に含まれている `setup.py` を使用してインストールできます:
     71`easy_install` をソースからインストールする方法を以下に示します。Subversion のリポジトリか、 tarball/zip のソースを引数に与えてください。
    5972{{{
    60 $ python setup.py install
     73easy_install http://svn.edgewall.com/repos/trac/plugins/0.12/spam-filter-captcha
    6174}}}
    6275
    63 ==== プラグインを有効にする ====
    64 個別の TracEnvironment にプラグインをインストールする場合と異なり、システム全体にインストールしたプラグインを有効にするためには、 [wiki:TracIni trac.ini] ファイルで明示的に指定しなければいけません。これは設定ファイルの `[components]` セクションに次のような記載を行います:
     76==== プラグインを有効にする ==== #Enablingtheplugin
     77個別の TracEnvironment にプラグインをインストールする場合と異なり、システム全体にインストールしたプラグインを有効にするためには、 [wiki:TracIni trac.ini] ファイルで明示的に指定しなければいけません。設定ファイルの `[inherit] plugins_dir` オプションに指定した Environment 共通の plugins ディレクトリにプラグインをインストールする場合も同じく、明示的に指定する必要があります。
     78
     79設定ファイルの `[components]` セクションに次のような記載を行えば完了です:
    6580{{{
    6681[components]
    67 webadmin.* = enabled
     82tracspamfilter.* = enabled
    6883}}}
    6984
    70 オプションの名前はプラグインの Python パッケージ名です。これはプラグインのドキュメンテーションに指定されていなければいけませんが、ソースを見れば簡単に見つけることが出来ます。(最上位のディレクトリにあるファイル `__init__.py` を探してください。)
     85オプションの名前はプラグインの Python パッケージ名です。これはプラグインのドキュメンテーションに指定されていなければいけませんが、ソースを見れば簡単に見つけることが出来ます。 (最上位のディレクトリにあるファイル `__init__.py` を探してください。)
    7186
    72 Note: プラグインのインストール後、 Apache を再起動する必要があるでしょう
     87Note: プラグインのインストール後、 Web サーバを再起動する必要があります
    7388
    74 == プラグインのキャッシュの設定 ==
     89==== アンインストール ==== #Uninstalling
    7590
    76 いくつかのプラグインは Python eggs のランタイム (`pkg_resources`) によって解凍される必要があります。というのもそれらの内容がファイルシステム上に実際に存在する必要があるからです。通常、 Python eggs は現在のユーザのホームディレクトリに解凍されますが、それにより問題が発生するかもしれません。その場合、環境変数 `PYTHON_EGG_CACHE` を設定してデフォルトのロケーションを上書きすることができます。
     91`easy_install` や `python setup.py` ではアンインストール機能は提供されていません。しかし、グローバルにインストールされた egg や参照を削除するための簡単な方法があります:
     92 1. setuptools でインストールした場合、 `easy_install -m [plugin name]` を実行し、 `$PYTHONLIB/site-packages/easy-install.pth` から参照を削除します。
     93 1. 実行可能ファイルを `/usr/bin`, `/usr/local/bin`, `C:\\Python*\\Scripts` などから削除します。実行可能ファイルが分からない場合、 `setup.py` の `[console-script]` を参照します。
     94 1. インストールされた場所 (通常 `$PYTHONLIB/site-packages/` 配下) の .egg ファイルやディレクトリを削除します。
     95 1. Web サーバを再起動する。
     96
     97egg の場所が分らない場合、探すためには以下の方法を使います (この方法は、どのようなパッケージでも使えます) - `myplugin` の箇所は、プラグインのネームスペースで置き換えてください。ネームスペースはプラグインの有効化の時に使用した名前と同じになります。
     98{{{
     99>>> import myplugin
     100>>> print myplugin.__file__
     101/opt/local/python24/lib/site-packages/myplugin-0.4.2-py2.4.egg/myplugin/__init__.pyc
     102}}}
     103
     104== プラグインのキャッシュの設定 == #SettingupthePluginCache
     105
     106プラグインは Python eggs のランタイム (`pkg_resources`) によって解凍される必要があります。それらの内容がファイルシステム上に実際に存在する必要があるからです。通常は現在のユーザのホームディレクトリの '.python-eggs' に解凍されますが、それにより問題が発生するかもしれません。その場合、環境変数 `PYTHON_EGG_CACHE` を設定してデフォルトのロケーションを上書きすることができます。
    77107
    78108`PYTHON_EGG_CACHE` を `SetEnv` ディレクティブを使用して Apache に設定するには以下のようにします:
     
    100130}}}
    101131
    102  ''Note: これは `mod_env` モジュールが必要です。''
     132 ''Note: !SetEnv を使用するためには、 Apache で `mod_env` モジュールが有効になっている必要があります。 `mod_python` が設定される Location ブロックでは !SetEnv ディレクティブも使用できます。''
    103133
    104134[wiki:TracFastCgi FastCGI] で、 Web サーバに設定するためには、 `-initial-env` オプションやサーバーが指定している方法で、環境変数を設定する必要があります。
    105135
    106 === Subversion の フックスクリプトについて ===
     136 ''Note: プロジェクトディレクトリを設定するために、既に -initial-env を使用している場合は、 [wiki:TracFastCgi TracFastCgi] に例示されるように、必要に応じて -initial-env ディレクティブを !FastCgiConfig ディレクティブに加えてください。''
     137
     138{{{
     139FastCgiConfig -initial-env TRAC_ENV=/var/lib/trac -initial-env PYTHON_EGG_CACHE=/var/lib/trac/plugin-cache
     140}}}
     141
     142=== Subversion の フックスクリプトについて === #Abouthookscripts
    107143
    108144もし、 Trac エンジンを呼び出すような Subversion の フックスクリプト - Trac の配布物の `/contrib` ディレクトリで提供されている post-commit フックスクリプトなど - を設定していたら、プラグインと同様にスクリプトの中で環境変数 `PYTHON_EGG_CACHE` を定義して下さい。
    109145
    110 == トラブルシューティング ==
     146== トラブルシューティング == #Troubleshooting
    111147
    112 === setuptools は正しくインストールされていますか? ===
     148=== setuptools は正しくインストールされていますか? === #Issetuptoolsproperlyinstalled
    113149
    114 これコマンドラインで実行してみてください:
     150以下のコマンドを実行してみてください:
    115151{{{
    116152$ python -c "import pkg_resources"
     
    119155もし、コマンドラインから '''何も''' かえって来なければ、 setuptools はインストール '''されています'''。そうでなければ、 Trac を動かす前に setuptools をインストールする必要があります。
    120156
    121 === Python egg は正しいバージョンですか? ===
     157=== Python egg は正しいバージョンですか? === #DidyougetthecorrectversionofthePythonegg
    122158
    123 Python egg はファイル名の中で Python のバージョンをエンコードします。例えば、 `MyPlugin-1.0-py2.4.egg` は Python 2.4 用の Python egg であり、異なる Python のバージョン (2.3 や 2.5) で動かそうとしても '''動かない''' でしょう。
     159Python egg はファイル名の中で Python のバージョンをエンコードします。例えば、 `MyPlugin-1.0-py2.5.egg` は Python 2.5 用の Python egg であり、異なる Python のバージョン (2.4 や 2.6) で動かそうとしても '''動かない''' でしょう。
    124160
    125161また、ダウンロードした Python egg ファイル が本当に ZIP アーカイブであるかどうかを確認して下さい。もし Trac サイトからダウンロードしたとしたら、 HTML プレビューページを代わりにダウンロードしているかもしれません。
    126162
    127 === プラグインは有効になっていますか? ===
     163=== プラグインは有効になっていますか? === #Isthepluginenabled
     164
    128165
    129166グローバル領域にプラグインをインストールした場合 (TracEnvironment の `plugin` ディレクトリ内 ''ではなく'') 、 [TracIni trac.ini] に明確に有効にする設定をしなければなりません。以下の事項を確認して下さい:
    130167 * `[components]` セクションに必要な行数を追加したか。
    131168 * パッケージ / モジュール名は正しいか
    132  * もし、(クラスに対して) モジュールを参照しているならば、必要に応じて、 ".*" を追加しているかどうか。
    133169 * 正しい値、 "enabled" になっているかどうか。例えば、 "enable" ではなく。
    134170
    135 === Python egg ファイルのパーミッションのチェック ===
     171=== Python egg ファイルのパーミッションのチェック === #Checkthepermissionsontheeggfile
    136172
    137 Trac はもちろん Python egg ファイルを読めなければいけません。分かってるよね。;-)
     173Trac は Python egg ファイルを読めなければなりません。
    138174
    139 === ログファイルのチェック ===
     175=== ログファイルのチェック === #Checkthelogfiles
    140176
    141 Trac で [TracLogging logging] を有効にし、ログレベルを `DEBUG` に設定し、プラグインがロードされるときのログメッセージを見て下さい。
     177Trac で [wiki:TracLogging logging] を有効にし、ログレベルを `DEBUG` に設定し、プラグインがロードされるときのログメッセージを見て下さい。
     178
     179=== 必要な権限を持っていることを確認してください === #Verifyyouhaveproperpermissions
     180
     181いくつかのプラグインでは、その機能を使用するために特別な権限を要求します。たとえば [http://trac.edgewall.org/wiki/WebAdmin WebAdmin] では、ナビゲーションバーに表示するためには TRAC_ADMIN 権限が必要になります。
     182
     183=== 読み込むプラグインのバージョンを間違えていませんか ? === #Isthewrongversionofthepluginloading
     184
     185複数のプロジェクトがある場合に plugins ディレクトリにプラグインを置くなら確実に正しいバージョンのプラグインがロードされていることを確認する必要があります。ここにいくつかの基本的なルールがあります:
     186 * 実行中の Trac サーバ (すなわち各々の Python プロセス) にはプラグインの 1 バージョンだけがロードできます。 Python の名前空間とモジュールリストは (プラグインが`有効 (enabled)` になっているか `無効 (disabled)` になっているかに関わらず) 全プロジェクトで共有されるでしょう。そしてそれは複製をハンドルすることができません。
     187 * グローバルにインストールされたプラグイン (通常は `setup.py install`) はグローバルな plugins ディレクトリあるいはプロジェクト毎の plugins ディレクトリ内のどんなバージョンも無視するでしょう。グローバルにインストールされたプラグインは、他のどのプラグインよりも前に動作するでしょう。
     188 * Trac サーバが (`TRAC_ENV_PARENT_DIR` セットアップのように) 複数のプロジェクトをホスティングした場合、異なったプロジェクトで異なるバージョンのプラグインを使用していると、どのバージョンのプラグインが使用されるかは不明です。異なるバージョンのプラグインのうちいずれか一つがロードされるでしょう。そしてロードされたプラグインは全てのプロジェクトで共有されます。 Trac は基本的に一番最初にリクエストを受けたプロジェクトからプラグインをロードします。
     189 * Python の site-packages 内に複数のバージョンをリストしておく (すなわち `setup.py install` を使用してインストールする) のは素晴らしいことです。 - setuptools は最も新しいバージョンを確実にインストールします。しかし、複数バージョンのプラグインをグローバルな plugins ディレクトリや、プロジェクト毎の plugins ディレクトリに格納しないでください。 - Trac はプラグインを探すときに バージョン番号、格納された日付などを気にしません。この場合 Trac がどのプラグインを最初に見つけ出すかを確実に指定する方法はありません。
     190
     191=== 上記のすべてに失敗した場合 === #Ifalloftheabovefailed
     192
     193plugins に対するログが出力されず、 egg が読み込み可能であり、 Python のバージョンが正しく、 ''その上で'' egg がグローバルにインストールされて (そして trac.ini で使用可能に設定されて) いても、なぜかプラグインが動かず、なんのエラーメッセージも表示されない場合は、 [http://trac.edgewall.org/wiki/IrcChannel IrcChannel] で質問してください。
    142194
    143195----