JRuby Sandbox加快启动速度

一直很羡慕有些公司的研发流程自动化管理,可以极大的节省时间,而我们公司很多操作要手动去做,为此,我使用Ruby语言写了不少脚本半自动化这些操作。
原来我一直使用JRuby来运行脚本,一直受困于它缓慢的启动速度。于是我在前些时候利用MRI中Win32::Clipboard替换了Swing中剪切板操作,从而将大部分脚本移植到了MRI 1.9下,来解决了启动速度的问题。
不过不是所有的脚本都能很好的移植到MRI下,有一些脚本使用了SVN操作,在JRuby中我使用SVNKit写了一个SVN操作类,开发一个脚本操作svn导出我提交的代码到指定目录,然后手工上传到测试服务器给产品经理看效果。在MRI里我还没有找到操纵SVN的好方法。
我想过一个方法,就是写一个commander.rb ,常驻内存,按下回车后通过load执行SVN操作脚本,代码原型如下:

while true
puts "press any key to run svnchangepath.rb"
gets
filename='svnchangepath.rb'
load filename
puts 'success'
puts ''
end

这个方法的确能加快速度,不过后面的执行结果不太正确,原因是每次load后执行的环境被污染了,容易出现很奇怪的bug。
那有没有办法让load执行在一个独立的JRuby环境中呢,我想到了JRuby samples中的MVM功能,尝试失败,直到我找到了JRuby Sandbox这个gem,才真正解决了这个问题,它的github地址:[url]https://github.com/omghax/jruby-sandbox[/url]
通过jgem install jruby_sandbox安装这个gem,然后修改上述代码,将load在sandbox中运行,问题解决。

#encoding: utf-8
require "sandbox"
while true
puts "press any key to run svnchangepath.rb"
gets
filename='svnchangepath.rb'
sand = Sandbox::Full.new
sand.eval("load '#{filename}' ")
puts 'success'
puts ''
end


启动速度的问题解决了,不过占去了大约50M的内存,始终感觉不太完美。先将将就就凑合凑合着用着吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值