项目

常规

个人资料

操作

如何在Apache上子目录(子URI)中安装Redmine

您的问题

您可能正在运行ruby 1.9,rails 3,apache,passenger,并且想要运行redmine。
不幸的是,它不是rails-3 ready,passenger只能运行一个ruby版本。
因此,您有两个选择。
  1. 依赖于主机头(http://redmine.mydomain.com
  2. 子URI部署(http://www.mydomain.com/redmine/

本教程将重点关注第二个选择。子URI部署。

依赖关系

我将假设您已经使用mongrel或更好的方式独立运行了redmine,例如,使用Thin

路线图.

  1. 更改独立应用程序的base-uri。
  2. 通过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代理.

反向代理通常有两个部分
  1. 将网络请求重定向到其他URI
  2. 重写返回的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.rbrelative_url_root行引用了子URI,所以我们可以实际上跳过第N°2步。

我们只需要重定向。
假设您正在部署到/redmine
  1. 在apache上添加并启用一个名为redmine的新site
  2. 编辑文件并填充以下内容
    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>
    
    ProxyRequests Off
    
    ProxyPass /redmine/ http://127.0.0.1:3000/
    
  3. 启动您的Thinmongrel服务器。 thin start -e production -a 127.0.0.1 -p3000
  4. 重启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次修订