AOT使用jRuby编译来混淆Rails代码

时间:2015-06-25 16:30:50

标签: java ruby-on-rails ruby jruby .class-file

我们在Windows Server 2012 R2中运行了一个RoR应用程序,在客户端网络中使用IIS,jruby和puma。生产应用程序运行良好!现在唯一的问题是,我们需要通过混淆以某种方式保护源代码。我最初的想法是,我们可以将.rb文件编译成.class文件,以便jruby可以消化那些而不是.rb文件。所以我尝试用一​​个文件来查看是否可以让它工作。我导航到myapp / app / controllers并......

jruby -S jrubyc application_controller.rb

在该目录中创建了一个已编译的类文件application_controller.class。然后,我尝试使用此链接中提到的方法查看旧版本的jRuby,看看它们是否可行 - https://github.com/jruby/jruby/wiki/RailsAOT

但它们都没有,要么给我一个未初始化的常量ApplicationController,要么无法加载文件application_controller。

我也试过这个https://www.ruby-forum.com/topic/216572#939791的说明,但鉴于我缺乏java知识,我很确定我没有正确的。这是application_controller.rb的最后一个状态 -

require 'java'
$CLASSPATH << 'lib'
java_import 'application_controller'

这给了我一个'无法导入application_controller as application_controller'我猜是因为类名中有下划线。

基本上,我试图让我的rails应用程序使用.class文件代替.rb文件。

更新: 所以我试图使用warbler创建一个编译的战争

jruby -S warble compiled war

然后我将.war提取到一个tomcat容器中以查看.rb文件的内容。他们都喜欢这样:

load __FILE__.sub(/.rb$/,'.class')

所以我尝试将该片段放入我在puma上运行的application_controller.rb中。我jruby -S rails服务器,并得到以下错误 -

use 'java_import' to load normal Java classes: application_controller

然后我将application_controller.rb更改为

require 'java'
$CLASSPATH << 'app/controllers'
java_import 'application_controller'

这给了我以下错误 -

cannot import class 'application_controller' as 'application_controller'

难道它需要是camelcase吗?我也在使用jRuby 9.0.0.0,我想我可能会尝试回滚到1.7并看看会发生什么

更新:它工作了! 回滚到jruby 1.7,在application_controller.rb上运行jrubyc并用

替换application_controller.rb内容
load __FILE__.sub(/.rb$/,'.class')

我的应用程序使用puma加载IIS很好。

1 个答案:

答案 0 :(得分:0)

使用已编译的功能尝试Warbler ...它确实相同但创建了一个加载.class版本的虚拟.rb文件(从您的笔记或老AOT维基是否你明确地尝试过了)

你应该查看生成的.war文件(它是.zip)如何更新已编译的.rb文件......