Trac + hg 使用時に80ポートでclone push pullしたい!
Tracで、mercurialプラグインを動かす事が出来たけど、意外なところに落とし穴があった。標準のhgweb.cgiは、ヒストリーのWeb画面の提供と共にリポジトリーとのやりとりを仲介してくれている。Tracとmercurialの組み合わせの時に、どうやってリポジトリにリーチするのか判らない。
id:pateo氏にアドバイスをもらい、にTracとhgwebの両運用をやってみる。
やりたい事
- trac.hoge.com/プロジェクト名
- hg.hoge.com/プロジェクト名
でアクセス出来るようにする
hgコマンド走らせるときには2のurlを使う
tracのインストール先は、/var/trac/HogeProject
mercurialのリポジトリは、/var/trac/HogeProject
tracをapache2で公開する為に、mod_wsgiを使う。tracのインストールパスに、trac.wsgiを作成する。この設定は、tokibito氏に教わった。
>trac.wsgi
import os os.environ['TRAC_ENV'] = '/var/trac/HogeProject/' import trac import trac.util import trac.util.compat as compat from trac.util import compat from trac.web.main import dispatch_request as application
これをVirtualHostでtrac.hoge.comにアサインする。
>/etc/apache2/sites-available/001-trac_hoge
NameVirtualHost * <VirtualHost *> ServerAdmin webmaster@localhost ServerName trac.hoge.com <Directory /> Options FollowSymLinks AllowOverride None </Directory> Alias /static /var/trac/HogeProject/htdocs WSGIScriptAlias / /var/trac/HogeProject/trac.wsgi <LocationMatch ^/login$> AuthType Basic AuthName "Trac" AuthUserFile /var/trac/users.htpasswd Require valid-user </LocationMatch> ErrorLog /var/log/apache2/trac_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/trac_access.log combined ServerSignature On </VirtualHost>
sites-enabledにリンクを張っておく。認証はとりあえづBasicで/var/trac直下にpasswdファイルを置いてみた。
問題は、ここからhgのwebcgiを、別サブドメインでサービスさせる。
/var/www/hg/HogeProjectディレクトリを作成し、中に適当なcgiを置いてみてもちゃんと動作してくれない。たぶん、バーチャルホストの書き方が悪いんだろうけどどう書いて良いのかが判らない。
<VirtualHost *> ServerAdmin webmaster@localhost ServerName hg.memogeek.com <Directory /> Options FollowSymLinks ExecCGI AllowOverride None Allow from all AddHandler cgi-script .cgi </Directory> Alias /static /var/www/hg WSGIScriptAlias / /var/www/hg <LocationMatch ^/login$> AuthType Basic AuthName "Trac" AuthUserFile /var/trac/users.htpasswd Require valid-user </LocationMatch> ErrorLog /var/log/apache2/hg_error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/hg_access.log combined ServerSignature On </VirtualHost>
適当に、AddHandler cgi-script .cgiを追加してみた。呼びたいファイルは以下の通り
#!/usr/bin/env python # # An example CGI script to use hgweb, edit as necessary # adjust python path if not a system-wide install: import sys sys.path.insert(0, "/usr/bin/python2.5") import os os.environ["HGENCODING"] = "UTF-8" os.environ["SERVER_PORT"] = "80" os.environ["SERVER_NAME"] = "hoge.com" # enable importing on demand to reduce startup time from mercurial import demandimport; demandimport.enable() # send python tracebacks to the browser if an error occurs: import cgitb cgitb.enable() # If you'd like to serve pages with UTF-8 instead of your default # locale charset, you can do so by uncommenting the following lines. # Note that this will cause your .hgrc files to be interpreted in # UTF-8 and all your repo files to be displayed using UTF-8. # #import os #os.environ["HGENCODING"] = "UTF-8" from mercurial.hgweb.hgweb_mod import hgweb from mercurial.hgweb.request import wsgiapplication import mercurial.hgweb.wsgicgi as wsgicgi def make_web_app(): return hgweb("/var/hg/PotetoProject", "PotetoProject") wsgicgi.launch(wsgiapplication(make_web_app))
こんな感じ。このファイルを直にpython2.5に食わすときちんとhtmlが出てくるので、やっぱり問題はapacheからこのファイルへのハンドリングがうまくいってないと思うけど、これ以上はお預けにする。