将jruby on rails 开发的应用部署到tomcat

环境说明

  • windows XP
  • jdk 6u12
  • jruby 1.2.0
  • rails 2.2.2
  • netbeans 6.5.1
  • tomcat 5.5
  • mysql 5

升级到jruby 1.2.0

jruby采用的版本并非netbeans自带的1.1.4,原因是rails 2.2.2需要gem版本为1.3,而jruby 1.1.4自带的gem版本是1.2,虽然之前我的第一篇文章里面介绍了如何将jruby gem版本升级,但是在部署的时候总是不成功,系统仍然认为gem版本为1.2,无奈之下只好采用jruby 1.2.0,下载链接http://jruby.codehaus.org/

netbeans里面可以很方便的添加和切换ruby平台,只需要你手工指定新的1.2.0的jruby.bat文件就行了

不过这下就得为jruby 1.2.0 重新安装所有的gem了,其中快速调试器的安装比较特殊,这里说明下

目前netbeans还不支持自动为jruby安装快速调试器,得自己动手,有篇wiki介绍了如何安装

http://wiki.netbeans.org/RubyDebugging

大致步骤如下:

首先下载ruby-debug-base-0.10.3.1-java.gem

然后在命令行下安装

jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem

最后安装debug ide

jruby -S gem install --ignore-dependencies -v 0.3.4 ruby-debug-ide

注意debug-ide的版本号,据我试验0.3.1也是可以用的,netbeans里面自带的就是0.3.1,而更高的0.4的不能用

 

用warbler打包项目

下面进入正题

首先你得安装warbler这个gem,这个在建立项目的时候就有提示

 

然后我参考了JE上一篇文章来做,不过过程较为不同http://chengj.iteye.com/blog/184479

activerecord-jdbc-adapter 这个gem是一定要装的,而activerecord-jdbcmysql-adapter 我没装也仍然打包成功(我的项目里面采用的是JDBC方式连接数据库)

 

项目中所有用到的jar包都要放到lib根目录下,包括项目中自带的那个mysql-connector-java-5.1.6-bin.jar

(写到这里时我突然想到:也许安装了activerecord-jdbcmysql-adapter 之后就可以不用引这个jar包了?)

 

修改enviroment.rb文件,将项目引用到的第三方gem写进去,例如我的项目使用了mislav-will_page,那就在里面添加

Ruby代码   收藏代码
  1. config.gem  'mislav-will_paginate' :version  =>  '~> 2.3.8' :lib  =>  'will_paginate' ,   :source  =>  'http://gems.github.com'   

 

下面在命令行下进入项目目录,执行命令

Ruby代码   收藏代码
  1. jruby -S warble config   

 
在config目录下面会生成一个warble.rb的文件,打开修改它,取消这样一行的注释

Ruby代码   收藏代码
  1. config.gems = [ "activerecord-jdbc-adapter" "jruby-openssl" ]   

 

最后仍然在项目目录下执行命令

Ruby代码   收藏代码
  1. jruby -S warble war   

 
于是一个war文件将会出现在项目根目录下,将它放到tomcat的webapps下面就行了,大功告成!

 

 特别提醒 :由于jruby中存在一个BUG,导致最后一步命令在window下执行时会报这样一个错

Ruby代码   收藏代码
  1. private method `split' called  for   nil : NilClass   
  2. Q:/app/codehaus/jruby_1_2_0/lib/ruby/gems/1.8/gems/rake-0.8.4/lib/rake/repaired_system.rb:109:in  `find_runnable'  
  3. (See full trace by running task with --trace)  

 这个BUG的原因可以参见这里http://jira.codehaus.org/browse/JRUBY-3598

简单的说是jruby在windows下执行ENV["PATH"]时无法取得path环境变量,而只有通过ENV["Path"]才能正确获取

那么解决方法就是自己手动修改rake下面的repaired_system.rb文件,将109行里面的PATH改为Path,或者在上面添加一行

Ruby代码   收藏代码
  1. ENV[ "PATH" ]=“你的PATH环境变量” 

你可能感兴趣的:(将jruby on rails 开发的应用部署到tomcat)