Windows下JRuby on Rails部署方案
显然,在Windows下面进行Rails的部署不是最佳的解决方案。
但是,做过项目的人都清楚,很多时候,我们无法自由的选择应用部署所在的环境。其中最常见的场景是下面两个:
?
遇到这样的情况,我们不得不考虑如何在Windows下面部署Rails应用。目前看,有两种较好的方式:
?
今天讨论后者。(后者还有一个小小的好处:对于某些客户,你可以声称正在开发一个标准的java应用。;-) ? )
一、部署JRuby环境在这里,我偷了一点懒,没有使用JRuby安装包,而是用了BitNami JRubyStack(第三方的安装包,该包将自动安装:JavaSDK, Tomcat, MySQL, JRuby, Rails, Glassfish gem, Subversion等等)
?
BitNami JrubyStack1.下载BitNami JRubyStack
http://bitnami.org/stack/jrubystack
2.Install BitNami JRubyStack
3.Use BitNami JRubyStack (见开始菜单)
以后所有的终端命令都应该在该窗口下执行。
?
更改mysql默认编码mysql的默认编码为latin1。
进入mysql,查看默认编码:
?
$ mysql -u root -p$ show variables like 'character%';?
显示字符编码:
?
+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | C:\PROGRA~1\BITNAM~1\mysql\share\charsets\ |+--------------------------+----------------------------+?
先暂停jrubystackmysql服务:
修改 C:\Program Files\BitNami JRubyStack\mysql\my.ini
在[client]下面加上:
?
default-character-set=utf8?
在[mysqld]下面加上:
?
character-set-server=utf8 init_connect='SET NAMES utf8'?
保存,退出
?
重启jrubystackmysql服务:
?
再次查看数据库编码
?
$ mysql -u root -p$ show variables like 'character%';?
显示字符编码:
?
+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | C:\PROGRA~1\BITNAM~1\mysql\share\charsets\ |+--------------------------+----------------------------+?
启动mysql
?
$ cd c:\program files\bitnami jrubystack\mysql\scripts$ servicerun.bat START?
停止服务
?
$ service.bat STOP?
将mysql安装为服务
?
$ serviceinstall.bat?
?
Install Rails gems?
C:\Documents and Settings\Administrator\BitNami JRubyStack projects>jruby -S gem install activerecord-jdbcsqlite3-adapter ruby-debug?二、Setup Rails App
?
$ cd C:\Documents and Settings\UserName\BitNami JRubyStack projects
$ jruby -S rails myappname?
更改 config/database.yml
?
development: adapter: jdbcsqlite3?
试运行
?
$ jruby script/server?
?
更改 config/database.yml
?
production: adapter: jdbcmysql?
创建mysql数据库
?
$ jruby -S rake db:migrate RAILS_ENV=production$ jruby -S rake db:seed RAILS_ENV=production
$ jruby script/server -e production?三、部署Rails应用到产品环境
产品环境的部署有以下几种方式:
发布war包,使用glassfish gem,使用trinidad gem,使用jetty-rails gem,使用Torquebox
下面依次讨论
?
I. Tomcat + war使用这种方式,你将部署一个“纯”java应用
打开BitNami终端
?
$ cd myappname?
使用Warbler gem生成 config/warble.rb 文件
?
$ jruby -S warble config?
这个文件中包含了将要生成的war文件所需的配置信息。如果你正在使用第三方的gem,则需要将他们的名字加入到config.gems数组中。
?
生成war文件,并将它copy到tomcat的webapps目录
?
$ jruby -S warble war$ copy jrubystack.war c:\Program Files\BitNami JRubyStack\apache-tomcat\webapps
?
启动Tomcat
?
$ jruby -S gem install trinidad$ jruby -S trinidad -e production?Trinidad配置文件
myappname\config.yml
?
--- port: 8088 # port where trinidad is running ajp: # ajp configuration section port: 8099 allowTrace: true</code> environment: production # environment for rails applications?
可以将trinidad安装为系统服务
(目前这一步总是出现这样那样的问题,还没有实验成功过。美中不足。)
?
$ jruby -S gem install trinidad_daemon$ jruby -S trinidad_daemon_install?
另一个插件 trinidad_daemon_extension 不支持windows系统
?
配置Apache1.安装APACHE
2.更改配置文件
用编辑工具打开Apache2.2目录下面的conf/httpd.conf,需要取消如下模块的注释:
?
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so?
如果你希望对页面输出使用压缩,也需要取消如下模块的注释:
?
LoadModule deflate_module modules/mod_deflate.so?
然后按如下内容配置基于HTTP代理的负载均衡:
在httpd.conf文件的最后加入 xml 代码
?
ProxyRequests Off <Proxy balancer://trini> BalancerMember ajp://127.0.0.1:8099 </Proxy> <VirtualHost *:8080> ServerName localhost DocumentRoot "C:\Documents and Settings\Administrator\BitNami JRubyStack projects\myappname\public" ProxyPass /images ! ProxyPass /stylesheets ! ProxyPass /javascripts ! ProxyPass / balancer://trini/ ProxyPassReverse / balancer://trini/ ProxyPreserveHost on </VirtualHost>?
trini定义了群集中的每个trinidad应用服务器节点。
ProxyPass /images !指明该URL开始的请求不代理给trinidad群集,而由Apache自己处理。
这种方式是基于jetty服务器的
1.安装$ jruby -S gem install jetty-rails?2.运行
$ cd myrailsapp$ jruby -S jetty_rails?3.配置文件
$ jruby -S jetty_rails -c path/to/config.yml?如果没有 -c 参数,jetty_rails将默认使用config/jetty_rails.yml文件。
ActionController::AbstractRequest.relative_url_root = "/testA"???JRuby 配置
jruby_min_runtimes: 1 jruby_max_runtimes: 2?Jetty 配置
thread_pool_max: 40 thread_pool_min: 1
acceptor_size: 20
?
Apachejetty-rails不需要与Apache进行集成!详见:?http://wiki.eclipse.org/Jetty/Tutorial/Apache