Apache+Mongrel上host多个rails应用

下面是Apache+Mongrel上host多个rails应用的方法,提供需要的人使用。

1. 软件版本
我用的操作系统是Redhat Linux 2.4.21-37.EL
系统安装时带的Apache httpd 2.0.46-54ent
ruby 1.8.5
rails 1.1.6
mongrel 0.3.13.4

2. 课题
你有一个可以运行的rails应用app1,要将它部署在httpd http://host/上,并在http://host/app1下访问

3. 实施步骤
[color=blue]a)[/color] 在apache httpd.conf相同目录下创建新的配置文件http-mongrel-proxy.conf输入以下内容
[code]
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /app1 http://127.0.0.1:3000/app1
ProxyPassReverse /app1/ http://127.0.0.1:3000/app1
[/code]
[color=blue]b)[/color] 确认httpd.conf中打开了[code]
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so[/code]几项,并在httpd.conf末尾添加一行将新的配置文件包含进来[code]Include conf/http-mongrel-proxy.conf[/code]

[color=blue]c)[/color] 在app1项目路径下启动mongrel
[code]mongrel_rails start --prefix=/app1 -e production [/code]其中--prefix是mongrel新版本中专门为了解决我们的课题提供的新选项。其它的启动选项如-d什么的自己加
[color=blue]d)[/color] 重启httpd
[color=blue]e)[/color] 如果你的rails应用按照rails惯例开发,你会发现你的images, stylesheet甚至是一些form action都不起作用。这是因为你在rhtml中使用了/images/, /stylesheets/, /action/view这样的绝对路径。
我建议的解决办法是在你的layout文件中设置<base href=" <%= $htmlbase %> " >,并修改所有以/开头的绝对路径为相对路径。
在config/environment/production.rb中添加全局变量定义
[code]$htmlbase="http://host/app1/fake.html"[/code]其中fake.html可以不存在。
为了保持开发时的方便,在config/environment/development.rb中添加定义
[code]$htmlbase="http://host:3000/fake.html"[/code]
这样开发和部署时的代码不用改来改去了。
[color=blue]f)[/color] 优化。
现在你的应用应该可以按照你预想的方式运行了,现在我们作一点小优化,让mongrel只负责动态内容的处理,让apache去处理静态信息。
确认httpd.conf中打开了[code]LoadModule alias_module modules/mod_alias.so[/code]
编辑http-mongrel-proxy.conf,在proxypass语句之前添加以下配置:
[code]
Alias /app1 "/path/to/app1/public"
<Directory "/path/to/app1/public">
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
Allow from all
</Directory>

ProxyPass /app1/images !
ProxyPass /app1/stylesheets !
ProxyPass /app1/javascripts !
[/code]
其中ProxyPass ... !语句是让proxy不要管这些静态内容,让alias来管。
重启apache,这时候应该可以看到你期望看到的页面了。
这个步骤中你可能需要的问题是静态内容的permission denied。这时候你需要给用户apache访问/path/to/app1/public的读权限。举个例子:
我的/path/to/app1/public是/home/centaur/workspace/app1/public,这时需要做两件事:
第一件,将用户apache加入centaur组(创建centaur用户时的缺省初始组),moduser命令自己查
第二件,为/home/centaur目录添加组成员可执行权限(x),一般这个目录的缺省权限是700
[color=blue]g)[/color] 下面你按照上面的方法可以host你的app2, app3,当然每个mongre_rails启动时占用的端口要不一样,在http-mongrel-proxy.conf中也要添加相应的配置。
[color=blue]h)[/color] 以上内容绝非原创,参考了N多前辈的成果,但是我这个应该更准确更实用一点。也请神原谅我的懒,等有人找我麻烦的时候再写参考文献一节吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值