因为使用的JRuby版本为1.7.9,版本较新,所以如果参考网上的部署教程会出现很多的问题,经过摸索找到了一种使用Tomcat来部署JROR的方法。
一.新建Jruby on Rails项目
1.首先下载JRuby,版本号1.7.9,Windows下直接安装,安装完毕后执行
JRuby –v 如果显示版本号,说明安装正确。
2.安装Rails,执行命令JRuby –S gem install rails(或者Jgem install rails),默认是安装最新版的Rails,当前的Rails版本应该是大于4.0。Rails安装完后执行
JRuby –S rails –v,如果显示版本号,说明安装正确。
3.对于准备使用JDBC来连接数据库的,需要安装额外的JDBC的gem包。执行以下的命令 JRuby –S gem installactiverecord-jdbc-adapter。
4.使用Rails来新建项目。Rails3.0以后新建项目的命令已经发生的变化,必须执行以下的命令JRuby –S rails new myApp(myApp为自己的项目名)。
5.Rails4.0以后与前面的目录结构有一些不同。具体可以参考http://guides.rubyonrails.org/getting_started.html。
6.在项目的编码过程中,注意在引用其他文件的时候最好全部写成相对的路径的方式。例如require ‘example’应该改为 require File.expand_path(File.dirname(__FILE__)+’example.rb’)。如果不这样写,在部署到Tomcat后会发生找不到文件的错误。
7.测试项目是否搭建成功。执行命令JRuby –S rails server(或者JRuby –S rails s),打开浏览器http://localhost:3000,看是否能正常打开网页。
二.Tomcat部署Jruby on Rails
1. 下载Tomcat,网址http://tomcat.apache.org/。本次教程是基于Tomcat 7。下载完Tomcat后直接解压便可以使用。
2. 安装openssl。执行命令JRuby -S gem install jruby-openssl
3. 安装打包工具warbler。执行命令JRuby –S gem install warbler。Warbler的功能是可以将JROR项目打包成一个J2EE项目中常见的war包。
4. 如果项目使用的JDBC连接数据库,进入项目目录下生成warbler的配置文件,执行命令 JRuby –S warble config。在config目录下会生成一个warble.rb文件,取消如下所示行的注释:
config.gems = ["activerecord-jdbc-adapter" , "jruby-openssl" ]
5.在项目目录下生成打包war文件。进入项目目录执行命令JRuby -S warble war
6.生成的.war文件可以有两种方式部署
方法一:直接将.war文件放到Tomcat的webapps目录下面,执行Tomcat的bin目录下startup.bat启动Tomcat,项目访问路径为http://localhost:8080/myApp(myApp为war包的名字亦为项目的名字)
注意:有可能出现js和css文件无法加载的情况,修改路由即可。
方法二:解压war文件,可以发现打包的文件的目录结构与普通的J2EE项目极其相似,
因此可以知道warbler工具的原理就是将JRuby on Rails项目源文件按照J2EE项目的结构进行打包,并当做一个J2EE项目在Tomcat容器中加载。不同的是启动项目前都会启动JRuby的JVM并且增加JRuby的侦听器,以便每次http请求到来时都可以调用JRuby来处理请求。过程如下:
1. 可以将没有打包进war包的文件拷贝到/WEB-INF文件夹下,例如自己在Rails项目下新建了一个文件夹,此文件夹不是Rails自动生成的,所以并不会被打包进war文件当中,此时需要手动添加进去。
2. 对于项目中的js,css及图片文件,可能会出现无法加载的情况,此时可以在项目目录新建javascripts和stylesheets两个文件夹,
3. 在Tomcat的/conf/Catalina/localhost目录下新建myApp.xml文件,文件的内容如下:
<?xml version='1.0'encoding='utf-8'?>
<Contextprivileged="true" docBase="C:\RT_TOOL_ON_JRUBY">
</Context>
**docBase 为war文件解压后的目录**
4. 通过http://localhost:8080/myApp来访问