HTTP経由の、hg push で「abort: HTTP Error 500: Internal Server Error」発生を回避する方法
CentOS5上に、Mercurialサーバを構築したのですが、hg push が正常に動作しませんでした。その原因と解決方法です。
レポジトリを作成する場合は、Linuxのアカウントでhg init を使いレポジトリを作成すると思います。この時レポジトリのオーナーは、いま使っているアカウントになります。hg pushコマンドをHTTP経由で行った場合は、Apacheの実行ユーザでレポジトリにアクセスしようとします。例えば、CentOS5の場合のデフォルトでは、Apacheの実行ユーザは、apache、実行グループはapacheになります。そのためhg initで作成したレポジトリは、HTTP経由でhg pushができるように、Apacheの実行ユーザにする必要があります。
普段使っているhogeユーザで、Mercurialのレポジトリを作成する例。ユーザがhogeになっているのが分かると思います。
[hoge@sc ~]$ hg init MyFirstProject
[hoge@sc ~]$ ls -l
合計 4
drwxrwxr-x 3 hoge hoge 4096 11月 29 21:29 MyFirstProject
例えば、実行ユーザをapacheにして、実行グループをapacheにする場合は以下のようにします。
[hoge@sc ~]$ sudo chown -R apache.apache MyFirstProject
ただこの場合は、このローカルマシンで作業をする場合に、apache を意識する必要があるので、普段使用するユーザと、apache ユーザ用のグループ(この場合はmyadmin)をgroupaddコマンドで作成したほうが管理が楽になると思います。
[hoge@sc ~]$ sudo chown -R apache.myadmin MyFirstProject
また、問題を解決する際にGoogleなどの検索エンジンを使うと思いますが、–debug -v –traceback で、実行時の詳細が取得できます。詳細なログで検索すれば解決方法が見つかるかもしれません。
[hoge@sc ~]$ hg push --debug -v --traceback
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 43, in _runcatch
return _dispatch(ui, args)
File "/usr/lib/python2.4/site-packages/mercurial/dispatch.py", line 441, in _dispatch
raise error.RepoError(_("There is no Mercurial repository"
RepoError: There is no Mercurial repository here (.hg not found)
abort: There is no Mercurial repository here (.hg not found)!
http://ubuntuforums.org/showthread.php?p=7539735
