我尝试在具有 shell 访问的共享服务器上设置 Trac,SW 是 Trac 1.0.1、Python 2.6.6、带有 mod_fcgid 和 mod_suexec 的 Apache 2.2.15。
我按照主机提供商 wiki 上的说明进行了设置,https://uberspace.de/dokuwiki/cool:trac。唯一的区别是我的 TRAC_ENV 目录位于子目录中,而不是直接位于我的主目录中(即 ~/path/to/trac,而不是 ~/trac)。(并且我在 DocRoot 中将 trac.fcgi 重命名为 foo-trac.fcgi,如下所示。但我也尝试将其重命名回 trac.fcgi。)
正如那里所写的,我已经将 trac.fcgi(也尝试使用 trac.cgi)从 TRAC_ENV/deploy/cgi-bin/ 复制到 $DocRoot/foo/foo-trac.fcgi 并添加
Options +ExecCGI
AddHandler fcgid-script .fcgi # also tried "AddHandler cgi-script .cgi"
RewriteEngine On
RewriteBase /foo
RewriteRule ^$ foo-trac.fcgi [L] # also tried foo-trac.cgi
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) foo-trac.fcgi/$1 [QSA,L] # also tried foo-trac.cgi
到 $DocRoot/foo/.htaccess。
TRAC_ENV 在 foo-trac.f?cgi 中正确设置(绝对路径以 / 开头),
但目前,我只收到“500 内部服务器错误”,并且在我的错误日志中我收到
(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: foo-trac.fcgi
(与 fcgi)
suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: foo-trac.cgi
(带有 cgi)。
所有的 .f?cgi 文件、它们的目录、.egg_cache 目录 (我已经对它进行了 mkdir 操作,但它并不存在并且不是由 trac (或 python) 本身创建的) 以及日志目录都是模式 0755。日志文件是 0644 (我已在尝试中触碰过它们)。
(好吧,Apache 日志目录和文件的所有者(和组也是)是 root。但是我当然不会尝试自己在那里写任何日志,TRAC_ENV/log/ 和 ~/log/ 是我的,我也尝试分别设置模式 777(目录)和 666(trac.log)——没有帮助,所以我再次将模式反转为 755/644。)
我也已经尝试/检查了来自的提示http://encodable.com/internal_server_error/和 /suexec_problems/ 在那里,但没有任何作用或帮助。
任何提示在哪里搜索问题(似乎是 suexec,但也许是重写规则;但是/和),如何发现它?或者也许有人直接有解决方案?:)
问候,
潘讷
答案1
嗯,我找到答案了。
我必须道歉:这是暗示之一http://encodable.com/internal_server_error/尽管——而且我一直天真地相信,行尾一定是正确的(Unix 风格,不是Windows 喜欢 CR/LF 结尾),因为我只使用 Linux。
而且我没有想到我会从 trac 项目中得到损坏的文件...但是事实确实如此,感谢我的主机托管商 uberspace.de 的支持,他们找到了它。:)
因此,一个简单的方法dos2unix trag.fcgi
解决了这个问题 - 但在整个 TRAC_ENV 目录和库中(在我的情况下在 ~/lib/python2.6/)有很多 CRLF 结尾的文件,所以我推荐类似
for file in $( find $TRAC_ENV $LIB_DIR -type f | xargs file | grep -i text | grep CRLF | cut -d\: -f1 );
do
dos2unix $file
done
你又会开心起来!;)