2010-08-01 109 views
2

昨天我设置了Apache服务我的Mercurial存储库,并让所有的东西都正常工作。然后,我测试了将更改推回到此存储库并显示错误,现在,我尝试的每一个操作都会弹出一个错误 - 即使只是一个简单的存储库GET请求!这是错误:Mercurial:权限被拒绝hgwebdir

mod_wsgi (pid=1771): Target WSGI script '/var/hg/hgweb.wsgi' cannot be loaded as Python module. 
mod_wsgi (pid=1771): Exception occurred processing WSGI script '/var/hg/hgweb.wsgi'. 
Traceback (most recent call last): 
    File "/var/hg/hgweb.wsgi", line 18, in ? 
    application = hgwebdir(config) 
    File "/usr/lib64/python2.4/site-packages/mercurial/hgweb/__init__.py", line 15, in hgwebdir 
    return hgwebdir_mod.hgwebdir(*args, **kwargs) 
    File "/usr/lib64/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.py", line 52, in __init__ 
    self.refresh() 
    File "/usr/lib64/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.py", line 82, in refresh 
    self.repos = findrepos(paths) 
    File "/usr/lib64/python2.4/site-packages/mercurial/hgweb/hgwebdir_mod.py", line 36, in findrepos 
    for path in util.walkrepos(roothead, followsym=True, recurse=recurse): 
    File "/usr/lib64/python2.4/site-packages/mercurial/util.py", line 1164, in walkrepos 
    for hgname in walkrepos(fname, True, seen_dirs): 
    File "/usr/lib64/python2.4/site-packages/mercurial/util.py", line 1146, in walkrepos 
    for root, dirs, files in os.walk(path, topdown=True, onerror=errhandler): 
    File "/usr/lib64/python2.4/os.py", line 276, in walk 
    onerror(err) 
    File "/usr/lib64/python2.4/site-packages/mercurial/util.py", line 1127, in errhandler 
    raise err 
OSError: [Errno 13] Permission denied: './dev/fd' 

我的存储库目录是由apache拥有,运行Apache的用户。我不知道为什么'./dev/fd'正在被操作。我重新启动了服务器多次,重新创建了存储库目录,但无论如何我仍然遇到这个错误!我没有权限重新启动机器,所以这不是一个选项。但它似乎处于一个非常糟糕的持续状态,我不知道如何解决它。任何帮助表示赞赏!

+0

发布您的解决方案作为答案并接受自己。 – mpen 2010-08-01 22:59:09

回答

3

原来,这是我的配置错误,而不是删除问题,我会在这里发布解决方案,以防将来有人遇到这个问题。

这里是我用的hgweb.config:这里

[paths] 
/= /var/hg/repos/* 

#[web] 
style = gitweb 
allow_archive = bz2 gz zip 
maxchanges = 200 
allow_push = * 
push_ssl = false 

两个问题,一个是显而易见的。我将[web]标题注释掉了,我假设很多选项对[paths]部分无效。此外,重新读取Hg文档后,push_ssl指令不属于hgweb.config文件,而是属于每个存储库的.hg/hgrc(或运行apache的用户的~/.hgrc)。解决这些问题后,事情完美无缺!