如何在共享主机上设置Mercurial中央存储库

时间:2010-03-20 18:10:00

标签: mercurial shared-hosting

我正在尝试使用共享主机设置中央存储库。我一直阅读本教程https://www.mercurial-scm.org/wiki/PublishingRepositories一直无济于事。以下是我采取的步骤。

1. Copy hgwebdir.cgi file to directory at http://url.com/central_repository/hgwebdir.cgi
2. Added the following information to the hgweb.config file and copied it to same place.
       [paths]
       projectname = /home/username/central_repository/projectname

       [web]
       baseurl = /hg
3. Added the following to an htaccess file and copied it to the same place
       # Taken from http://www.pmwiki.org/wiki/Cookbook/CleanUrls#samedir
       # Used at http://ggap.sf.net/hg/
       Options +ExecCGI
       RewriteEngine On
       #write base depending on where the base url lives
       RewriteBase /hg
       RewriteRule ^$ hgwebdir.cgi  [L]
       # Send requests for files that exist to those files.
       RewriteCond %{REQUEST_FILENAME} !-f
       # Send requests for directories that exist to those directories.
       RewriteCond %{REQUEST_FILENAME} !-d
       # Send requests to hgwebdir.cgi, appending the rest of url.
       RewriteRule (.*) hgwebdir.cgi/$1  [QSA,L]
4. Uploaded the repository without the working directory to /home/user/central_repository/projectname
5. Tried to clone the repository to my computer using the folloing destination path: http://url.com/hg/projectname

完成这些步骤后,我收到404:Not Found错误。

但是,如果我将目标路径更改为http://url.com/central_repository/projectname它就像它找到了存储库一样,它告诉我它找到了变更集,并且它添加了变更集和清单,但随后它说“事务中止!HTTP错误500:内部服务器错误。

感谢您的帮助!大都市

修改

每当我尝试将ScriptAlias,Alias,以前的内容或以下内容放入htaccess文件时,我都会收到500内部服务器错误。

<Directory "/home/username/central_repository/projectname">
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

事实上,如果我从hgwebdir.cgi文件中取出所有内容,除了以下内容,我会收到500错误。

#!/usr/bin/env python
#
# An example CGI script to export multiple hgweb repos, edit as necessary

我甚至尝试将此文件放在cgi-bin目录中,但我仍然收到错误消息。我也确定将文件权限设置为755.是否有可能我无法在此服务器上运行python文件?

4 个答案:

答案 0 :(得分:1)

如果.cgi扩展名尚未映射到主机Apache配置中的cgi处理程序,则需要为hgwebdir.cgi脚本提供ScriptAlias或AddHandler行。实际上,如果你只做一个ScriptAlias,你可以摆脱所有不必要的RewriteCond和RewriteRule:

ScriptAlias /hg /home/username/central_repository/hgwebdir.cgi

repo还有一个/home/user/central_repository/projectname/.hg目录,对吧?将.hg的内容直接放入projectname是错误的。

最后,尝试使用浏览器访问它,而不是使用克隆。您在http://ggap.sf.net/hg/看到了什么? apache访问和错误日​​志中有什么?希望您可以访问错误日志,因为它始终具有调试此内容的最佳输出。

答案 1 :(得分:0)

http://wiki.dreamhost.com/Mercurial

过去这对我有用。

答案 2 :(得分:0)

这也可能是权限错误。

我刚遇到类似的情况,我在通常的地方创建了一个存储库,apache通过hgwebcgi来获取它。我可以在本地克隆该存储库(不是通过网络服务器),而不是从远程客户端克隆,所以我知道这不是一个hg错误。

原来问题是我的存储库由我创建它的用户拥有,没有给apache的读/写访问权限。

运行

chown -R apache:apache <repo>

做了这个伎俩。 (我独家通过网络访问这些存储库,所以这似乎没问题,否则会提出一个解决方案,允许apache访问而不拥有它)

答案 3 :(得分:0)

我遇到了同样的问题。我需要在共享主机上设置一个Mercurial服务器,我没有root / shell访问权限。我遵循了这个指南,令人惊讶的是很少受挫,让它起作用: http://javadocs.wordpress.com/2010/04/27/set-up-mercurial-1-5-1-on-a-shared-host-simplified/