Apache+Mongrel上host多个rails应用

转载 2007年09月21日 17:35:00

下面是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. 实施步骤
a) 在apache httpd.conf相同目录下创建新的配置文件http-mongrel-proxy.conf输入以下内容

代码
  1. ProxyRequests Off   
  2. <Proxy *>  
  3. Order deny,allow   
  4. Allow from all   
  5. </Proxy>  
  6.   
  7. ProxyPass /app1 http://127.0.0.1:3000/app1   
  8. ProxyPassReverse /app1/ http://127.0.0.1:3000/app1   
  9.              

b) 确认httpd.conf中打开了
代码
  1. LoadModule proxy_module modules/mod_proxy.so   
  2. LoadModule proxy_http_module modules/mod_proxy_http.so  
几项,并在httpd.conf末尾添加一行将新的配置文件包含进来
代码
  1. Include conf/http-mongrel-proxy.conf  

 

c) 在app1项目路径下启动mongrel

代码
  1. mongrel_rails start --prefix=/app1 -e production   
其中--prefix是mongrel新版本中专门为了解决我们的课题提供的新选项。其它的启动选项如-d什么的自己加
d) 重启httpd
e) 如果你的rails应用按照rails惯例开发,你会发现你的images, stylesheet甚至是一些form action都不起作用。这是因为你在rhtml中使用了/images/, /stylesheets/, /action/view这样的绝对路径。
我建议的解决办法是在你的layout文件中设置<base href=" <%= $htmlbase %> " >,并修改所有以/开头的绝对路径为相对路径。
在config/environment/production.rb中添加全局变量定义
代码
  1. $htmlbase="http://host/app1/fake.html"  
其中fake.html可以不存在。
为了保持开发时的方便,在config/environment/development.rb中添加定义
代码
  1. $htmlbase="http://host:3000/fake.html"  

这样开发和部署时的代码不用改来改去了。
f) 优化。
现在你的应用应该可以按照你预想的方式运行了,现在我们作一点小优化,让mongrel只负责动态内容的处理,让apache去处理静态信息。
确认httpd.conf中打开了
代码
  1. LoadModule alias_module modules/mod_alias.so  

编辑http-mongrel-proxy.conf,在proxypass语句之前添加以下配置:
代码
  1. Alias /app1 "/path/to/app1/public"   
  2. <Directory "/path/to/app1/public">  
  3.     Options Indexes FollowSymLinks MultiViews   
  4.     AllowOverride none   
  5.     Order allow,deny   
  6.     Allow from all   
  7. </Directory>  
  8.   
  9. ProxyPass /app1/images !   
  10. ProxyPass /app1/stylesheets !   
  11. ProxyPass /app1/javascripts !   

其中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
g) 下面你按照上面的方法可以host你的app2, app3,当然每个mongre_rails启动时占用的端口要不一样,在http-mongrel-proxy.conf中也要添加相应的配置。
h) 以上内容绝非原创,参考了N多前辈的成果,但是我这个应该更准确更实用一点。也请神原谅我的懒,等有人找我麻烦的时候再写参考文献一节吧。 

相关文章推荐

在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails

一、安装Ruby、rails、mongrel和Apache2.2 从rubyforge网站下载One-Click Ruby Install,运行安装程序,就安装好了ruby和rubygems。 运行命...
  • Galdys
  • Galdys
  • 2011年07月20日 15:00
  • 422

Windows 安装Apache2.2和Mongrel运行Ruby on Rails

一、安装Ruby、rails、mongrel和Apache2.2 从rubyforge网站下载One-Click Ruby Install,运行安装程序,就安装好了ruby和rubygems。 ...

【Ruby on Rails 起步(二)】Windows下搭建RubyonRails 3.0.4 + Mongrel 1.2.0 pre + Apache2.2.17服务器

不知道为什么,感觉Rails自带的WEBrick有点慢,于是决定利用已有的Apache搭建一个Mongrel的。系统是Windows 7,昨天下载的Ruby1.9.2(但是除了主文件夹名是Ruby19...

CentOS7 Nginx+mongrel+rails部署及部署(之rails篇)

1.安装ruby ruby版本选择1.8.7

Ubuntu下Apache服务器安装以及使用Passenger插件部署Rails应用

Apache服务器安装以及使用passenger插件部署rails应用,基于Ubuntu 12.04 LTS。小例子可以部署在rails自带的WEBrick上,逐渐往后走还得上Apache。 安装a...

apache服务器安装以及使用passenger插件部署rails应用,基于ubuntu 12.04 LTS

小例子可以部署在rails自带的WEBrick上,逐渐往后走还得上Apache。 安装apache服务器 命令是sudo apt-get install apache2 安装passenger插...
  • ABBuggy
  • ABBuggy
  • 2012年12月01日 12:51
  • 6592

Apache + Tomcat 配置多个应用

最近在服务器上需要配置多个应用,使用apache+tomcat搭配,采用mod_jk进行分配。 刚开始在同一个tomcat中配置了多个应用,后来感觉效果不好,改为每个tomcat对应一个应用。搜索资...

用Apache分发同一个服务器上的多个应用【实践成功记录版本】

使用场景: 引用: 最近在项目中碰到一个问题,我们团队为了节约项目成本,从朋友那边借了一台服务器来跑我们的应用,但之前在这台服务器上面已经跑了一个tomcat的应用,占用了80端口,那么我们的应用...

apache集成多個TOMCAT 一个tomcat对应一个应用,不同域名访问不同应用

apache集成多個TOMCAT 一个tomcat对应一个应用,不同域名访问不同应用 转自:http://apps.hi.baidu.com/share/detail/20890923   配置...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Apache+Mongrel上host多个rails应用
举报原因:
原因补充:

(最多只允许输入30个字)