• 痛苦的人生——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的部署问题了(也许吧......)

  • 相关阅读:
    PHP 构造方法 __construct()(转)
    PHP笔记
    php的print_r第二个参数是true有啥用啊
    如何给类或方法规范地注释
    详解spl_autoload_register()  函数(转)
    PHP中文网上的分页代码
    echo 0000
    [csu/coj 1619] 递归
    [csu/coj 1083]贪心
    [csu/coj 1078]多个序列的最长公共子序列
  • 原文地址:https://www.cnblogs.com/supakito/p/4001038.html
Copyright © 2020-2023  润新知