小编Mic*_*elO的帖子

Apache和git-http-backend

我目前正在使用Apache 2.4.7在Ubuntu LTS 14.04机器上设置一些git存储库.

这是apache配置:

SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \                                                                                                                             
                    info/refs | \                                                                                                                        
                    objects/(info/[^/]+ | \                                                                                                              
                             [0-9a-f]{2}/[0-9a-f]{38} | \                                                                                                
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \                                                                                     
                    git-(upload|receive)-pack))$" \                                                                                                      
    /usr/lib/git-core/git-http-backend                                                                                                                   

<Location /git/oswald.git>
 Options +ExecCGI
 AuthType Basic
 DAV on
 AuthName "Git"
 AuthUserFile /etc/apache2/git_paragon_passwd
 Require valid-user

    Order allow,deny
    Allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)

测试存储库在/var/www/html/git/oswald.git.在存储库中,我设置了config属性

http.receivepack=true
Run Code Online (Sandbox Code Playgroud)

该文件git-daemon-export-ok存在.

如果我现在尝试克隆:

git clone https://server/git/oswald.git
Run Code Online (Sandbox Code Playgroud)

认证后,我得到:

fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
Run Code Online (Sandbox Code Playgroud)

(git 2.1.0客户端,在服务器git 1.9.1上).

我尝试了几件事,所以如果我不使用git-http-backend并通过WebDAV我可以克隆但不能推送,使用git-http-backend我甚至无法克隆.

如果我改变的最后一行 …

apache git git-http-backend

8
推荐指数
1
解决办法
1万
查看次数

使用带有超时的TChan

我有一个TChan作为一个线程的输入,应该像这样:

如果sombody在特定时间内写入TChan,则应检索内容.如果在指定时间内没有任何内容写入,则应取消阻止并继续Nothing.

我对此的尝试是使用如下的超时功能System.Timeout:

timeout 1000000 $ atomically $ readTChan pktChannel
Run Code Online (Sandbox Code Playgroud)

这似乎工作,但现在我发现,我有时会丢失数据包(它们写入通道,但不会在另一侧读取.在日志中我得到这个:

2014.063.11.53.43.588365 Pushing Recorded Packet: 2 1439
2014.063.11.53.43.592319 Run into timeout
2014.063.11.53.44.593396 Run into timeout
2014.063.11.53.44.593553 Pushing Recorded Packet: 3 1439
2014.063.11.53.44.597177 Sending Recorded Packet: 3 1439
Run Code Online (Sandbox Code Playgroud)

其中"推送记录的数据包"是从一个线程写入,"发送记录的数据包"是从发送方线程中的TChan读取.Sending Recorded Packet 2 1439缺少该行,这表示从TChan成功读取.

似乎如果在错误的时间点收到超时,则通道丢失该数据包.我怀疑threadKill内部使用的功能timeout和STM不能很好地协同工作.

它是否正确?有人有另一种不会丢失数据包的解决方案吗?

multithreading haskell stm

7
推荐指数
1
解决办法
512
查看次数

标签 统计

apache ×1

git ×1

git-http-backend ×1

haskell ×1

multithreading ×1

stm ×1