我试图在安装了Python 2.5和mod_wsgi 3.3的Mac OS X Leopard(10.5.8)上configurationReviewBoard 。 我使用的是SQLite和OS X附带的标准Apache 2; 文档根目录位于/Library/WebServer/Documents/ 。 由于我的机器已经在这个根目录中的其他path上承载了一些其他的东西,我想在一个path服务ReviewBoard而不是服务器的根。
我创build了一个站点,设置了必要的所有者和权限,链接了Apacheconfiguration文件,并删除了作为服务器根目录的行。 这是我的conf/apache_wsgi.conf :
WSGIScriptAlias "/reviewboard" "/Library/WebServer/Documents/reviewboard/htdocs/reviewboard.wsgi" <Directory "/Library/WebServer/Documents/reviewboard/htdocs"> AllowOverride All </Directory> # Alias static media requests to filesystem Alias /reviewboard/media "/Library/WebServer/Documents/reviewboard/htdocs/media"
但是,我无法得到ReviewBoard上来,只有404错误页面。
当我在conf / settings_local.py中有以下内容时:
SITE_ROOT = '/reviewboard/' FORCE_SCRIPT_NAME = '' DEBUG = True
我访问http://example.com/reviewboard/ ,我在Apache访问日志中获得以下内容:
"GET /reviewboard/ HTTP/1.1" 404 1923
并在浏览器中使用以下内容的404页面:
请求方法:GET
请求url: http : //example.com/使用djblets.util.rooturl中定义的URLconf,Django按以下顺序尝试这些URL模式:
^reviewboard/
目前的urldashboard/不符合其中的任何一个。
这似乎与Apache和mod_wsgi类似的报告问题几乎相同,所以我尝试了在该线程中build议的方法…
当我在conf / settings_local.py中有以下内容时:
SITE_ROOT = '' FORCE_SCRIPT_NAME = '/reviewboard' DEBUG = True
我访问http://example.com/reviewboard/ (重启Apache之后),我在Apache access_log中得到以下内容:
"GET /reviewboard HTTP/1.1" 301 - "GET /reviewboard/dashboard/ HTTP/1.1" 302 - "GET /reviewboard/dashboard/account/login/?next_page=/reviewboard/dashboard/ HTTP/1.1" 404 2871
和浏览器中的404与以下内容:
请求方法:GET
请求url: http : //example.com/reviewboard/dashboard/account/login/?next_page=/reviewboard/dashboard/使用djblets.util.rooturl中定义的URLconf,Django按以下顺序尝试这些URL模式:
^ ^admin/
^ ^media/(?P<path>.*)$
^ ^account/
^ ^api/
^ ^r/
^ ^reports/
^ ^dashboard/$
^ ^users/$
^ ^users/(?P<username>[A-Za-z0-9@_\-\.]+)/$
^ ^groups/$
^ ^groups/(?P<name>[A-Za-z0-9_-]+)/$
^ ^groups/(?P<name>[A-Za-z0-9_-]+)/members/$
^ ^feeds/rss/(?P<url>.*)/$
^ ^feeds/atom/(?P<url>.*)/$
^ ^account/logout/$
^ ^$
^ ^iphone/
当前的URLdashboard/account/login/与以上任何一个都不匹配。
这与使用Apache和mod_python , lightppd和fastcgi报告的问题类似,除了我使用的是Apache和mod_wsgi。
只要我可以将ReviewBoard托pipe在现有服务器实例的唯一path中,我并不在乎实际站点文件的位置。 帮助启动和运行将不胜感激!
我已经得出结论认为@ptman是正确的,支持与ReviewBoard的mod_wsgi是最好的。 幸运的是,我发现了在10.5和10.6以及Intel和PowerPC下构buildmod_python的解决方法。 (我使用的桌面下的服务器是运行10.5.8的G5,这是最好的。)
这里是我开发的用于在OS X上为Apache下载,configuration,构build和安装mod_python的bash脚本:
#! /bin/bash cd ~/Downloads curl -O http://archive.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz tar xvzf mod_python-3.3.1.tgz cd mod_python-3.3.1 # Detect kernel version (OS X 10.5.x is "9.x.0", OS X 10.6.x is "10.x.0", etc.) if [ `uname -r | cut -d . -f 1` -ge 10 ]; then echo "*** Code change to compile on 10.6+" cp src/connobject.c src/connobject.c.orig sed 's/APR_BRIGADE_SENTINEL(b)/APR_BRIGADE_SENTINEL(bb)/g' src/connobject.c.orig > src/connobject.c diff -u src/connobject.c.orig src/connobject.c echo fi ./configure # See http://mike.crute.org/blog/mod_python-on-leopard for Makefile changes. # On a G5 we have to explicitly build ppc64 or Apache won't load the module. cp src/Makefile src/Makefile.orig if [ `arch` == "ppc" ]; then sed -e 's/^(LDFLAGS=.*)$/\1 -arch ppc -arch ppc64/g' \ -e 's/^(CFLAGS=.*)$/\1 -arch ppc -arch ppc64/g' \ -e 's/(\$\(APXS\) \$\(INCLUDES\) -c)/\1 -Wc,"-arch ppc" -Wc,"-arch ppc64"/g' \ -E src/Makefile.orig > src/Makefile else sed -e 's/^(LDFLAGS=.*)$/\1 -arch i386 -arch x86_64/g' \ -e 's/^(CFLAGS=.*)$/\1 -arch i386 -arch x86_64/g' \ -e 's/(\$\(APXS\) \$\(INCLUDES\) -c)/\1 -Wc,"-arch i386" -Wc,"-arch x86_64"/g' \ -E src/Makefile.orig > src/Makefile fi make sudo make install sudo apxs -e -a -n 'python' mod_python.la
完成了这个任务 – 并且安装了ReviewBoard及其所有依赖关系 – 我在服务器根目录下创build了一个站点,并将其configuration为使用mod_python:
rb-site install /Library/WebServer/Documents/reviewboard
这里是我的conf/apache-modpython.conf在我的现有服务器的子path上托pipe我的ReviewBoard站点:
<Location "/reviewboard/"> PythonPath "['/Library/WebServer/Documents/reviewboard/conf'] + sys.path" SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings SetEnv PYTHON_EGG_CACHE "/Library/WebServer/Documents/reviewboard/tmp/egg_cache" SetEnv HOME "/Library/WebServer/Documents/reviewboard/data" SetHandler mod_python PythonHandler django.core.handlers.modpython PythonAutoReload Off PythonDebug Off # Used to run multiple mod_python sites in the same apache PythonInterpreter reviewboard_reviewboard </Location> <Location "/reviewboard/media"> SetHandler None </Location> Alias /reviewboard/media "/Library/WebServer/Documents/reviewboard/htdocs/media" <Directory "/Library/WebServer/Documents/reviewboard/htdocs"> AllowOverride All </Directory>
为了方便起见,我只是从相应的Apacheconfiguration目录中将它链接起来:
sudo ln -s /Library/WebServer/Documents/reviewboard/conf/apache-modpython.conf \ /etc/apache2/other/reviewboard.conf
希望这有助于其他人也这样做。 感谢您的正确方向,@ptman!