痛苦的人生——JRuby on Rails的开发与部署小记

最近单位领导部署了一项开发用户自助服务系统的任务,该任务有且仅有我一人独立完成——哈哈,十分美妙的工作呢。

恰巧楼主最近被Ruby的美妙特性所迷惑,于是义无反顾地投入到Ruby on Rails的怀抱中了。

可是在系统的开发过程中,领导又做了新的指示——要和锐捷SAM系统进行一定的交互。MB!不早说,怎么办?好吧,幸好还有JRuby这个活宝能够应付差事,反正这个系统的用户数量也不多,性能应该不是问题!

由于笔者是第一次使用Rails,而且还是和JRuby搭伙,所以碰到了一些问题,所以要记录下来呢。(今天中午看到的一条微博说:如果想让一个人死,就让他去搞JRuby on Rails吧~~~我这算是自杀么~~~~)

【楼主使用的Rails 4.1,JRuby 1.7.5】

问题1. Rails如何与现有的数据库交互

除了和WebService交互外,该系统还需要和数据库进行一定的交互,而这个数据库是之前就已经存在的,因此不能使用Rails便捷的“rails g model"来实现了,怎么办呢?经过笔者多次的尝试,发现可以采用如下方式:

1. rails g model modelname

生成和数据表对应的数据模型,可以不用指定列的类型和名称,同时表的名称与类的名称也无需完全一致。

2.在modelname的类中,添加如下代码:

class Modelname < ActiveRecord::Base
    self.table_name = :tablename
    self.primary_key = :yonghuming
end

其中:table和:yonghuming分别指定了对应的表名与主键名称,这样就无需使用id作为表的主键了。

问题2. 使用了自定义数据表无法更新数据

楼主在使用上述模型进行更新数据的时候突然发现,该模型竟然无法更新,调用Rails的日志发现,执行的SQL语句为“UPDATE ****** WHERE yonghuming = nil”,可是我明明指定了系统的主键啊。经过反复的尝试,笔者最终确定了问题的所在——使用了自定义主键——为了解决这个问题,必须明确定义模型的主键值,即:

user = Modelname.find('key')
user.id = 'key'

......


user.update_columns({mima: mima})

问题3. JRuby on Rails的部署

可以说,JRuby on Rails的部署,是本次开发过程中最痛苦的一环了,反复的尝试、反复的测试,脑死机无数次。感觉部署中最大的问题就在于各类文件的位置存放。

1.本次部署采用warbler工具部署

2.部署前,建议将所有的jar文件存放到lib文件夹下

3.ruby文件中调用jar包时,直接使用require '****.jar'

4.另外读取的配置文件(主要是jar包要读取的配置文件),建议在warble的配置文件中取消如下注释:

config.java_classes = FileList["配置文件的相对路径"]

做好以上工作后,就基本可以避免JRuby on Rails的部署问题了(也许吧......)

原文地址:https://www.cnblogs.com/supakito/p/4001038.html