この質問は、2011 年に、別のオペレーティング システム (WSRV2008R2 ではなく XP) で尋ねられたもので、非常によく似た問題を抱えている人ですが、受け入れられている解決策は、現在は古い mercurial バージョン 1.8 に戻ることです。2012年には、それは良い答えではないと思います。
Apache 2.2 と Trac 0.12、Mercurial 2.2.2 を Windows で動作させ、すべて Apache で動作させる方法があるかどうか知りたいです。私が抱えている問題は、Python プログラミングに関連しているように見えます。また、さまざまな圧縮および解凍されたモジュール形式の Python の使用と Mercurial の使用に関連しているようです。
これをすべて機能させるには、Windows 上でソースから Mercurial をビルドするか、Mercurial の「純粋な python」バージョンを使用する必要があるようです。Python について、または Mercurial について知りたいのですが、「純粋な python」を実行する必要があるかもしれないこれらの問題につながる可能性があります。おそらく、受け入れられている答えの 1 つは、Mercurial は奇抜な獣であり、mod_wsgi の下では、mercurial の純粋な python バージョンのみを使用する必要があるというものです。基礎となる Python と Mercurial の実装の理由も、知っておくとよいでしょう。
Mercurial の怪しげなデマンド ロード機能が関係しているようです。これは Mercurial ソースのソース コード レベルの機能であり、私を混乱させています。誰かが説明してくれることを願っています。
「library.zip」のmercurialがインストールされたバージョンでの使用は、コマンドラインからpython.exeを実行するとmercurialがインポートされる実行時の状況も作成しているようです(Windowsのコマンドプロンプト、環境とパスが設定されています) Apache 内にいる場合は設定されます) が、Mercurial の主要な Python ユニットは、Apache 内から mod_wsgi を使用してインポートされません。
これは私が使用したテスト スクリプトで、コマンド プロンプトから正常に動作し、この python 2.6 インスタンスに Mercurial の実行可能なセットがあることを示していますsite-packages
。
from mercurial import ui, hg
path = 'D:/MyHgRepo'
repo = hg.repository(ui.ui(), path)
print path,"Repository info:"
print repr(repo), "object len: ",len(repo)
ただし、Trac
内部でホストされている内部から実行Apache
すると、mercurial モジュールをロードしようとすると失敗し、最初は奇妙なdemandimport
失敗が発生し、それが修正されると、Trac で理由が指定されずに静かに (問題を解決するには、trac ソースコードでデバッグする必要があります)この最後のビット、おそらく)。Demandimport.py
site-packages/Mercurial フォルダー内のモジュールです。この例外のトレースバックは、trac.log からのものです。
どちらの場合も、次Look in the Trac log for more information.
のように表示されます-ここのエラーメッセージが問題のようです:
Traceback (most recent call last):
File "build\bdist.win32\egg\trac\loader.py", line 68, in _load_eggs
entry.load(require=True)
File "build/bdist.linux-i686/egg/pkg_resources.py", line 1954, in load
entry = __import__(self.module_name, globals(),globals(), ['__name__'])
File "C:\Program Files\BitNami Trac Stack\python\lib\site-packages\mercurial\demandimport.py", line 114, in _demandimport
mod = _origimport(name, globals, locals)
File "build\bdist.win32\egg\trac\mimeview\rst.py", line 155, in <module>
File "C:\Program Files\BitNami Trac Stack\python\lib\site-packages\mercurial\demandimport.py", line 87, in __getattribute__
return getattr(self._module, attr)
AttributeError: 'module' object has no attribute 'directives'
上記の例外は、奇妙なことに、需要のインポート ユニット全体を「コメント アウト」することで修正できます。これが私のnull「パス」実装です:
# demandimport.py - disabled by warren.
'''
demandimport - disabled in code by warren.
'''
def enable():
"does nothing"
pass
def disable():
"does nothing"
pass
上記のハックにより、上記の目に見える例外がクリアされ、trac.log にエラーがなくなりますが、それでも Trac 内に Hg プラグインは表示されません。
インターネットで大雑把にグーグルで調べたところ、次のことがわかりました。
\Python2.6 システム フォルダにインストールされる Windows 用の Mercurial インストーラは、.pyc だけでなく .pyd ファイルも含む「Library.zip」を出荷します。これは、Python をインタラクティブに使用している場合や、スタンドアロンの http操作
mod_wsgi
を介して使用している場合ではなく、apache で使用している場合に機能する人もいれば、失敗する人もいます。hg serve
Trac Mercurial Plugin の作成者が library.zip の解凍を提案しているのを見たことがあります。これが私の最初の質問です。Library.zip で何が起こっているのか、それは私の問題ですか。Windows で Python 2.6 または 2.7、mod_wsgi、Trac、および Mercurial をすべて Apache 内から実行するのに苦労している人はたくさんいます。彼らが抱えている根本的な問題は、ソフトウェアユーザーやインストーラーの解決能力をはるかに超えているようであり、解決するには難解な、または少なくとも初歩的な Python プログラミングの知識が必要です。
そのため、プログラミング回答サイトでこの質問をしています。Mercurial 2.2 の壊れた Python コードベースを理解し、診断し、デバッグできるように、Python とそのライブラリ、モジュール、およびサイト パッケージのアーキテクチャを理解したいと考えています。 mod_wsgi/apache2.2 環境で使用すると、私のシステムでは機能しません。
私は Python 2.6 と Trac 0.12 を使用しています。これらはすべて Bitnami Trac Stack インストーラーによってインストールされています。Mercurial Web サイトから mercurial-2.2-for-x86-for-Python2.6 インストーラーを介してインストールされた Mercurial 2.2 を使用しています。