如何在Apache上子目录(子URI)中安装Redmine¶
您的问题¶
您可能正在运行ruby 1.9,rails 3,apache,passenger,并且想要运行redmine。不幸的是,它不是rails-3 ready,passenger只能运行一个ruby版本。
因此,您有两个选择。
- 依赖于主机头(
http://redmine.mydomain.com
) - 子URI部署(
http://www.mydomain.com/redmine/
)
本教程将重点关注第二个选择。子URI部署。
依赖关系¶
我将假设您已经使用mongrel或更好的方式独立运行了redmine,例如,使用Thin
路线图.¶
- 更改独立应用程序的base-uri。
- 通过apache代理。
更改独立应用程序的base-uri.¶
实际上非常简单。
打开config/environment.rb
并在文件的末尾添加以下行
Redmine::Utils::relative_url_root = "/redmine"
当然,您可以选择任何您希望它运行的子目录。
如果您尝试在localhost:3000/redmine上测试您的应用程序,所有的css和js都会显示为损坏。
在我的设置中,对js和css的路线实际上被重写为指向/redmine/javascript和/redmine/stylesheets,但问题是... 文件根本不存在!。因为它们通过public/*以静态方式提供,所以rails的重写实际上破坏了它们,但我们这正是想要的。
不用担心,在下一步中将会修复。
通过apache代理.¶
反向代理通常有两个部分- 将网络请求重定向到其他URI
- 重写返回的HTML和标题以匹配子URI
在第N°1步,对http://www.mydomain.com/redmine
的请求被发送到http://www.mydomain.com:5001
在第N°2步,HTML被重写以更改对http://www.mydomain.com:5001/
的所有引用,将其更改为http://www.mydomain.com/redmine
。
但是,因为所有URL引用都是相对的,所以我们从未在rails HTML中看到http部分,只是"/wharever",而且我们已经通过添加到environment.rb
的relative_url_root行引用了子URI,所以我们可以实际上跳过第N°2步。
假设您正在部署到
/redmine
- 在apache上添加并启用一个名为redmine的新site
- 编辑文件并填充以下内容
<Proxy *> Order deny,allow Allow from all </Proxy> ProxyRequests Off ProxyPass /redmine/ http://127.0.0.1:3000/
- 启动您的Thin或mongrel服务器。
thin start -e production -a 127.0.0.1 -p3000
- 重启apache
sudo apache2ctl graceful
准备好了!¶
只需打开http://www.mydomain.com/redmine/
,您就会浏览代理后的redmine站点。
重要:请记住尾部斜杠!www.whatever.com/redmine/
工作正常www.whatever.com/redmine
不会工作。
作为一个解决方案,只需在 www 根目录下创建一个名为 redmine.html 的文件,并使用简单的重定向。
例如:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Your Page Title</title> <meta http-equiv="REFRESH" content="3;url=/redmine/"></HEAD> <BODY> Redirecting in 3 seconds... </BODY> </HTML>
如果你想立即重定向,只需将 content 值中的 3 改为 0。
就这样了。希望这能帮到一些人。
由 Carlos Troncoso 更新 12年前 · 2次修订