您的位置:首页 > 运维架构 > Tomcat

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

2011-05-22 16:53 260 查看

环境说明

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上一篇文章来做,不过过程较为不同/article/7476075.html

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代码




config.gem
'mislav-will_paginate'
,
:version
=>
'~> 2.3.8'
,
:lib
=>
'will_paginate'
,
:source
=>
'http://gems.github.com'

config.gem 'mislav-will_paginate', :version => '~> 2.3.8', :lib => 'will_paginate',  :source => 'http://gems.github.com'


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

Ruby代码




jruby -S warble config

jruby -S warble config


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

Ruby代码




config.gems = [
"activerecord-jdbc-adapter"
,
"jruby-openssl"
]

config.gems = ["activerecord-jdbc-adapter", "jruby-openssl"]


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

Ruby代码




jruby -S warble war

jruby -S warble war


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

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

Ruby代码




private method `split' called
for

nil
:
NilClass

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'

(See full trace by running task with --trace)

private method `split' called for nil:NilClass
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'
(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代码




ENV[
"PATH"
]=“你的PATH环境变量”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: