资源描述
在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails
资料一
一、安装Ruby、rails、mongrel和Apache2.2
从rubyforge网站下载One-Click Ruby Install,运行安装程序,就安装好了ruby和rubygems。
运行命令:
gem install rails –y
gem install mongrel –y
gem install mongrel_service -y
安装好了rails和mongrel
从Apache网站下载Windows版本的Apache2.2,运行安装程序,就安装好了Apache2.2。
二、把Mongrel作为Services启动
mongrel_rails service::install -N depot -c d:\Rubyproject\depot -p 3000 -e production
-N指明服务名称,-d指明rails应用的目录,-p是mongrel监听的tcp端口,-e是启动模式为生产模式
这样打开控制面版|管理工具|服务,就可以发现增加了一项名为“depot”的服务,就可以通过控制面版来管理服务了。如果需要命令行启动和关闭该服务,那么:
mongrel_rails service::start -N depot
mongrel_rails service::stop -N depot
如果需要从服务中注销该项服务,那么:
mongrel_rails service::remove -N depot
如果需要安装多个mongrel实例,那么可以这样:
mongrel_rails service::install -N depot0 -c d:\Rubyproject\depot -p 3000 -e production
mongrel_rails service::install -N depot1 -c d:\Rubyproject\depot -p 3001 -e production
诸如此类。
三、配置Apache2.2
用编辑工具打开Apache2.2目录下面的conf/httpd.conf,需要取消如下模块的注释:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
如果你希望对页面输出使用压缩,也需要取消如下模块的注释:
LoadModule deflate_module modules/mod_deflate.so
然后按如下内容配置基于HTTP代理的负载均衡:
1. ProxyRequests Off
2. <Proxy balancer://myCluster>
3. BalancerMember http://localhost:3000
4. BalancerMember http://localhost:3001
5. </Proxy>
6.
7. <VirtualHost *:80>
8. ServerName
9. DocumentRoot d:/rubyproject/depot/public
10. ProxyPass /images !
11. ProxyPass /stylesheets !
12. ProxyPass /javascripts !
13. ProxyPass / balancer://myCluster/
14. ProxyPassReverse / balancer://myCluster/
15. ProxyPreserveHost on
16. </VirtualHost>
myCluster定义了群集中的每个mongrel应用服务器节点。ProxyPass /images !指明该URL开始的请求不代理给Mongrel群集,而由Apache自己处理。重起Apache,然后打开浏览器访问,检查配置是否正确。至此,在Windows Server上面一个具备良好稳定性和性能的Ruby on rails生产环境就搭建好了。对于页面输出,还可以使用mod_deflate进行输出内容压缩,以提高页面下载速度,这个就留给大家自己配置了。
注:根据以上配置完成后,可能出现图片、css文件、javascript文件无法使用的问题,此时需要对public进行定位说明:
· Alias /images " c:/depot/public/images"
· <Directory " c:/depot/public/images">
·
· Order allow,deny
· Allow from all
·
· </Directory>
· Alias /stylesheets " c:/depot/public/stylesheets"
· <Directory " c:/depot/public/stylesheets">
·
· Order allow,deny
· Allow from all
·
· </Directory>
· Alias /javascripts "c:/depot/public/javascripts"
· <Directory " c:/depot/public/javascripts">
·
· Order allow,deny
· Allow from all
·
· </Directory>
资料二
在 Windows 上用 Apache 与 Mongrel 服务多个 Rails 应用程序(一)
这篇文章将带你安装 Ruby,Gems,Rails,及 Windows XP 或 2003 服务器上重要的其它库,它们使用 Apache 来服务静态内容及使用 Mongrel 来服务多个 Rails 应用程序。
我们将带你来安装一个 production 环境,它将有类似于下面的 URL 结构:
我们将使用 Apache 来代理对高端口上 WEBrick 及 Mongrel 的请求,允许我们分别地管理应用程序,甚至移到应用程序到不同的服务器。
一、下载及安装 Apache.........................................................................................2
1、启动 Apache 为一个服务..... .............................................................2
二、安装 Rails ........................................................................................................3
1、安装 Ruby, Rubygems, 与 RDoc ............................................................3
2、安装 Rails..................................................................................................3
3、安装 Rmagick ...........................................................................................3
4、安装 Mongrel ............................................................................................3
三、为 Rails Hosting 配置 Apache.........................................................................3
1、配置 Apache .............................................................................................3
四、服务 Rails 应用程序.........................................................................................4
1、准备 Rails 应用程序..................................................................................4
2、配置 Apache 来代理 Rails 应用程序.......................................................4
3、链接配置. ...................................................................................................5
4、测试连接.....................................................................................................5
五、Reverse Proxy 与 URLs ..................................................................................5
1、安装 proxy 插件.........................................................................................5
2、创建 proxy 插件.........................................................................................6
六、使用 Mongrel 代替 WEBrick ............................................................................6
1、设置一个新的 Rails 应用程序.....................................................................6
2、用 Mongrel 测试 .......................................................................................6
3、安装 Reverse Proxy 插件到该新应用程序内..............................................7
4、安装 Mongrel 为 Windows 服务 ............................................................7
5、修改 Apache Proxy 配置 ..................................................................... .....7
七、Wrapping Up .......................................................................................................8
八、感谢......................................................... ...... .....................................................8
九、附录......................................................................................................................8
1、Apache httpd.conf...........................................................................................8
2、Apache conf/http-proxy.conf .........................................................................12
3、plugin/reverse_proxy_fix/lib/reverse_proxy_fix.rb .........................................13
一、下载及安装 Apache
这篇文章使用 2.0x 版本的 Apache 。在写此文章时,2.2x版本可以下载了,但它在 FastCGI 上有问题。
1、从下面链接下载 Windows 版本的 Apache :
http://apache.cs.utah.edu/httpd/binaries/win32/apache_2.0.55-win32-x86-no_ssl.msi
2、以 Administrators 组成员的身份登录,并运行 installer。
3、确保选择了 “only for the current user on port 8080”。我们稍后将安装它为一个服务,但我们需要安排有配置的机会。(当然也可以使用第一项)
4、选择 Custom Install 并修改安装文件夹为 c:apache ,然后选择 Next 。
5、安装将花费一些时间,并且你会看到一个用于一些配置的控制台窗口出现。在这之后安装完成。
1、启动 Apache 为一个服务
1、 打开命令提示符窗口并导航到文件夹 c:apacheapache2bin 。
2、 输入 apache –k install 来安装 Apache 为一个服务。
3、 如果 Windows 防火墙询问你是否需要允许对 Apache 的访问,你应该允许它。
4、 现在该服务应该做为一个 Windows 服务出现了,并也应该出现在 Apache 监控器内。
5、 Apache 现在做为一个服务运行,但它还没有启动。这很好因为我们还有很多工作要做。
以上步骤可参考:http://www.evance.name/tools/Apache-Chs/index.html
二、安装 Rails
1、安装 Ruby, Rubygems, 与 RDoc
1、 下载 Ruby 一键安装程序。
2、 安装软件到缺省位置 c:ruby 并接受所有缺省值。
2、安装 Rails
1、 打开一个命令提示符窗口。
2、 安装 Rails (gem install rails –include-dependencies) 。
3、 安装 RedCloth (gem install redcloth) 。
3、安装 Rmagick
1、 从下面链接下载 Rmagic 的 Windows 版本
http://rubyforge.org/frs/download.php/6276/RMagick-1.9.2-IM-6.2.4-6-win32.zip
2、 解压缩到一临时目录内。
3、 打开一个命令提示符窗口并导航到临时目录内。
4、 用 gem 安装
gem install Rmagick-1.9.2-IM-6.2.4-6-win32.gem
5、 运行 postinstall.rb 脚本
ruby postinstall.rb
4、安装 Mongrel
1、 打开一个命令提示符窗口。
2、 安装 mongrel 及相关程序 (gem install mongrel –include-dependencies) 。
3. 选择 win32 <>
在 Windows 上用 Apache 与 Mongrel 服务多个 Rails 应用程序(二)
可参考 Mongrel 文档:http://mongrel.rubyforge.org/docs/index.html
三、为 Rails Hosting 配置 Apache
这儿有一些重要的步骤需要完成,以便于 Apache 能有效地服务于 Rails 应用程序。
1、配置 Apache
1、 找到文件 c:apacheapache2confhttpd.conf ,并用文本编辑器打开它。出于方便,Apache 安装程序可能为这个以放置了一个项目在你的启动项内。你可能必须为这个文件关联一个编辑器。选择“记事本”或类似的文本编辑器。
2、找到行 LISTEN 并修改它的值为 80,以设置 Apache 运行在 80 端口。
3、找到行
LoadModule alias_module modules/mod_alias.so
并移除 # 字符来去除注释行。我们稍后将需要这个!
4、 保存文件。但不要关闭它!
5、 使用 Apache 控制台启动 Apache ,或者从 Windows 的 Services 面板启动服务。
6、 导航到 http://localhost 并确保你有一个服务在运行!
7、 关闭 Apache 服务。
四、服务 Rails 应用程序
1、准备 Rails 应用程序
1、 在你的服务器上创建个目录来存放 Rails 应用程序。
c:web
2、 复制一个可正常工作的 Rails 应用程序到此目录内。
c:webapp1
3、 用 WEBrick 测试以确保此 Rails 应用程序能正常工作。确保用于 production 的数据库配置正确。(Sorry ,这儿就不讲数据库配置了!)
cdwebapp1
ruby script/server –e production –p 4000
2、配置 Apache 来代理 Rails 应用程序
1、在 c:apacheapache2conf 目录创建个名为 http-proxy.conf 的新文件。
2、在文件的顶部,放置下面代码行:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
这设置了 proxy 模块并设置了缺省的代理政策。有关 mod_proxy 的更多信息可参阅文档。
3、现在粘贴下面代码以便 Apache 可以找到你的静态文件。我们将创建一个别名,它会让 Apache 在/app1 上找到我们文件,然后我们定义 c:webapp1 为一个由 Apache 提供服务的目录。
Alias /app1 "c:/web/app1/public"
<Directory "C:/web/app1/public">
Options Indexes FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
4、现在应用至关重要的 proxy 规则以便 Apache 可以找到你的应用程序!
ProxyPass /app1/images !
ProxyPass /app1/stylesheets !
ProxyPass /app1/javascripts !
ProxyPass /app1/ http://127.0.0.1:4000/
ProxyPass /app1 http://127.0.0.1:4000/
ProxyPassReverse /app1/ http://127.0.0.1:4000/
头三行告诉 Apache 不要代理这些目录。也就是说,你的 images,stylesheets,和 javascript 目录将由 Apache 服务,可提升速度。
下三行实际上发送请求。该行
ProxyPass /app1 http://127.0.0.1:4000/
实际上是防止人们查看包含 dispatcher 的 public 目录的内容。
3、链接配置
1、 打开 c:apacheapache2confhttpd.conf 。
2、 在文件的最底部,添加下面行。因此在 Apache 启动时,你的新 proxy 配置文件会被添加。
Include conf/httpd-webrick-proxy.conf
4、测试连接
你还应该让你的 Rails 应用程序运行在 http://localhost:4000/ 上,并且你现在应该有一个 Apache 实例运行在 http://localhost/ 上,因此如果 proxy 真正工作了的话,你就会看到这些。
导航到 http://localhost/app1/ ,你应该看到你的 Rails 应用程序在运行。但是,它可能看起来不正确并且你会有大量坏掉的链接。继续往下读找出为什么。
五、Reverse Proxy 与 URLs
我们现在面临的最大问题是由 Rails 在内部创建的 URL ,例如 stylesheet 样式表链接,url_for 链接及其它不能按我们期望那样工作的链接等等。相反,它们引导用户绕到代理。这很不好因为它暴露了代理服务器。
通常的解决办法是使用一些工具解析来自代理的 HTML 应答,并重写适当的链接。但是,它们可能在 Windows 上更复杂,因为你需要为你的特定 Apache 版本找到一个 mod_proxy_html 编译完的版本。幸运地,还有一种方法… 使用一个简单的 Rails 插件,它修改 Rails 创建它的 URL 的方式。我们打算让 Rails 对它通过系统创建的任何 URL 预先考虑我们额外的 URL 。这将强迫所有用户的请求通过 IIS 代理返回。
1、安装 proxy 插件
从你应用程序的根目录内运行命令:
ruby script/plugin install
该插件进行安装然后向你询问基本的 url 。输入 http://localhost/app1 后按下 ‘enter’ 键。如果正常的话,则配置文件将被写成。如果配置文件没有被修改,你可以导航到 vendor/plugins/reverse_proxy_fix 并自己修改它。
若安装失败,你可以按下一节的介绍自己构建插件。
2、创建 proxy 插件
若你没有完成 Subversion 安装,你可以按下面步骤来适当地配置插件。
· 创建个名为 “reverse_proxy_fix” 的 Rails 插件。
ruby/script generate reverse_proxy_fix
· 定位到你应用程序的 vendor/plugins/reverse_proxy_fix 目录并编辑 init.rb 文件
o 给文件添加下面代码
Require ‘reverse_proxy_fix”
· 编辑 vendor/plugins/iis_proxy_fix/lib/reverse_proxy_fix.rb ,并且用附录的代码做该文件内容。
· 修改第一行代码匹配你的应用程序的 url…
BASE_URL = ‘http://localhost/app1’
· 最后,关闭 WEBrick 并重启动它来重启动应用程序。
· 如果正常的话,应用程序的所有内部链接现在应该正确了并通过代理被路由回来。
六、使用 Mongrel 代替 WEBrick
应用程序前面已经用基本的 WEBrick 服务器测试过了,它对没有许多用户的小伸缩应用程序的服务很好。但现在我们遂步添加 Mongrel 。实际上我们将通过添加第二个 Rails 应用程序来完成。
1、设置一个新的 Rails 应用程序
1、 导航到 c:web 目录。
cdweb
2、 在该目录内创建个新的 Rails 应用程序 (或者是你现有的应用程序) 。
rails app2
3、 确保 Rails 应用程序用 WEBrick 测试过。确保数据库内对 production 的配置正确。
cdwebapp2
ruby script/server –e production –p 4001
4、 用 CTRL+Break 停止 WEBrick 。
2、用 Mongrel 测试
要用 Mongrel 测试,简单地运行命令 mongrel_rails start –p 4001 。
如果你看到这些,你就做对了!你现在可以在 Production 模式下把该应用程序安装为一个服务。当然,你应该导航到 http://localhost:4001/ 来测试它。
3、安装 Reverse Proxy 插件到该新应用程序内
现在我们知道应用程序可以工作在 Mongrel 下,我们需要在应用程序内使用在第一个应用程序内使用的 reverse_proxy_fix 插件,或者是创建它。可参阅前一步对该插件的创建。
4、安装 Mongrel 为 Windows 服务
我们将使用 production 模式来安装应用程序,因此对于你的应用程序要确保它的 database.yml 文件指向 production 数据库。
1、按下 ctrl+break 确保 Mongrel 被停止。如果提示“Terminate Batch Job” 就回答 “Yes”。
2、运行下面命令把应用程序安装为一个服务
mongrel_rails_service install –n rails_app2 –p 4001
这将创建个名为 rails_app2 的新 Windows 服务,你可以控制面板内观察到它。
3、你可以从控制面板中启动该服务,或者使用下面命令行来启动它:
mongrel_rails_service start –n rails_app2
a、使用 mongrel_rails_service stop –n rails_app2 来中止服务。
B、若有些东西不能正确工作,你可以移除该服务
mongrel_rails_service delete –n rails_app2
4、你可能希望配置完后,能设置该服务在机器启动时自动完成。
5、修改 Apache Proxy 配置
Add a new section to 对于该新应用程序要给你的httpd-proxy.conf 文件添加个新节。你可引用附录内已完成httpd-proxy.conf 文件。
Alias /app2 "c:/web/app2/public"
<Directory "C:/web/app2/public">
Options Indexes FollowSymLinks
AllowOverride none
Order allow,deny
Allow from all
</Directory>
ProxyPass /app2/images !
ProxyPass /app2/stylesheets !
ProxyPass /app2/javascripts !
ProxyPass /app2/ http://127.0.0.1:4001/
ProxyPass /app2 http://127.0.0.1:4001/
ProxyPassReverse /app2/ http://127.0.0.1:4001/
保存文件并重启动 Apache 服务器。导航到http://localhost/app2/ ,你应该看到你的应用程序工作正常了。
七、Wrapping Up
现在你应该有两个应用程序通过 Apache 运行在被代理的高端口上。一旦你设置了它,它就会完美地运行而不会有错误。但是,你可能希望在 Windows 的性能趋于下降时,考虑运行你自己的 benchmark 。
同样,你将注意到此处的用法并没有允许 Apache 来缓存由 Rails 创建的页面。请求总是被发送给 Mongrel 。要解决这个问题,你应该使用 Apache 做为对在高端口依次调用 Mongrel 的 Ligttpd 实例的代理。我认为这有太多的层次而且不是必须的,像 Mongrel 在服务静态内容时,就完成得很好。你可以使用 rewrite 重写规则来处理这些问题中的一些,但这是另一个主题了。
八、感谢
· Zed Shaw for developing Mongrel and for giving me a hard time about Rails on Windows.
· Gael Martin for Rails Prod ( which gave me some insight into how proxying should work.
· The Ruby on Rails community for the various postings that led to this article.
九、附录
1、Apache httpd.conf
ServerRoot "C:/apache/Apache2"
PidFile logs/httpd.pid
Timeout 300
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
Listen 80
LoadModule access_module modules/mod_access.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_module modules/mod_auth.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule imap_module modules/mod_imap.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule ssl_module modules/mod_ssl.so
ServerAdmin
ServerName :80
UseCanonicalName Off
DocumentRoot "C:/apache/Apache2/htdocs"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "C:/apache/Apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
<FilesMatch "^.ht">
Order allow,deny
Deny from all
</FilesMatch>
TypesConfig conf/mime.types
DefaultType text/plain
展开阅读全文