最近、Windowsの1つでApache2.2とgitをセットアップしましたXP PCでgitwebアクセス用に https://git.wiki.kernel.org/index)のセットアップを使用します.php/MSysGit:GitWeb wikiに記載されているように、コーディング方法でgitwebで動作するように見えるPerlの唯一のバージョンは、MSysGitに含まれているバージョンです。ActivePerlとStrawberryPerlは、特定の必要な機能を実装していません。別のインタープリターはオプションではありません。
C:\Program Files\Git\bin>Perl.exe --version
This is Perl, v5.8.8 built for msys
いずれの場合も、セットアップされて機能しますが、何らかの理由で、ページの読み込みごとに約10秒の遅延があります。これをトラブルシューティングするために、簡単なhelloworld.cgiを作成し、gitweb.cgiの隣のディレクトリに配置しました。 gitwebと同じPerlインタープリターを使用するように設定されています。
#!C:\Program Files\Git\bin\Perl.exe
print "Content-type: text/html\n\n";
print "Hello, world!\n";
このスクリプトもサーバーで実行するのに10秒以上かかります。コマンドプロンプトを起動し、同じPerl実行可能ファイルで直接実行すると、すぐに実行されます。
mod_cgiはApache構成にロードされ、システム用に変更されたgitwikiに示されている構成スタンザを使用しています。
# Config to make the gitweb CGI available through Apache.
Alias /git "C:/Program Files/Git/share/gitweb"
<Directory "C:/Program Files/Git/share/gitweb">
AddHandler cgi-script .cgi
<Files ~ "\.cgi$">
Options +ExecCGI
</Files>
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex gitweb.cgi
</Directory>
私が見逃している他の設定ディレクティブはありますか?別のPCからアクセスするか、マシン上で直接localhost経由でアクセスするかは問題ではないようですので、DNSは除外されていると思います。また、Apacheエラーログには何もダンプしていません。
Msysgitの代わりにcygwinのバージョンのPerlを使用してこれを修正しました。それは本当にあなたの応答時間をスピードアップします。
これを行うには、gitweb.cgiスクリプトを3か所で変更する必要があります。最初の行は次のようになっているはずです。
#!C:/cygwin/bin/Perl
Msysgitの代わりにcygwinのバージョンのgitを使用することも選択したので、projectrootがcygwinの形式であることを確認する必要があります。
our $GIT = "C:/cygwin/bin/git";
our $projectroot = "/cygdrive/c/temp/repos";
これは、Apacheがcgiプロセッサを実行する前に環境変数をサニタイズするためです。そのままにしておく変数は次のとおりです。
また、Apache固有の変数(SCRIPT_NAMEなど)を多数追加します。
したがって、解決策は、msysShellまたはmsysPerlを実行する前にいくつかの変数を元に戻す何らかのラッパー(通常のW32Pythonを使用してPython cgiスクリプトを使用しています)を使用することです(外部からmsysのものを実行するのはc:/path/to/sh.exe --login -c "Perl /path/to/script.cgi"
)です。
設定する必要のある変数(Apacheが通過する変数またはApacheが単独で設定する変数に加えて)は次のとおりです。
\\MACHINENAME
C:\Users\USERNAME\AppData\Local\Temp
TMPは必須ではありませんが、TMPが見つからない場合、msysは文句を言います。
もちろん、TMPには任意のディレクトリを使用できます。
なぜLOGONSERVER
が必要なのかわかりません。ごめんなさい。
ラッパースクリプト/アプリケーションがstdoutをバイナリモードに設定していることを確認してください。設定していない場合、ApacheはPremature end of script headers
エラーをスローします。