Java 使用jRuby编译AOT以混淆Rails代码
我们有一个运行在windows server 2012 R2中的RoR应用程序,在客户端网络中使用IIS、jruby和puma。生产应用程序运行良好!现在唯一的问题是,我们需要通过模糊处理以某种方式保护源代码。我最初的想法是,我们可以将.rb文件编译成.class文件,以便jruby可以消化这些文件而不是.rb文件。所以我试着用一个文件,看看是否能让它工作。我导航到myapp/app/Controller并Java 使用jRuby编译AOT以混淆Rails代码,java,ruby-on-rails,ruby,jruby,.class-file,Java,Ruby On Rails,Ruby,Jruby,.class File,我们有一个运行在windows server 2012 R2中的RoR应用程序,在客户端网络中使用IIS、jruby和puma。生产应用程序运行良好!现在唯一的问题是,我们需要通过模糊处理以某种方式保护源代码。我最初的想法是,我们可以将.rb文件编译成.class文件,以便jruby可以消化这些文件而不是.rb文件。所以我试着用一个文件,看看是否能让它工作。我导航到myapp/app/Controller并 jruby -S jrubyc application_controller.rb 在
jruby -S jrubyc application_controller.rb
在该目录中创建了一个已编译的类文件application_controller.class。然后,我尝试了这个链接中提到的方法,以获得一个较旧版本的jRuby,看看它们是否可以工作-
但他们都没有,要么给我一个未初始化的常量ApplicationController,要么无法加载文件ApplicationController
我也尝试过这方面的说明,但鉴于我缺乏java知识,我很确定我没有正确的说明。这是应用程序的最后状态。\u controller.rb-
require 'java'
$CLASSPATH << 'lib'
java_import 'application_controller'
然后,我将.war提取到tomcat容器中,以查看.rb文件的内容。它们看起来都是这样的:
load __FILE__.sub(/.rb$/,'.class')
所以我试着把这个片段放到运行在puma上的应用程序_controller.rb中。我访问了jruby-SRails服务器,发现以下错误-
use 'java_import' to load normal Java classes: application_controller
因此,我随后将我的应用程序_controller.rb更改为
require 'java'
$CLASSPATH << 'app/controllers'
java_import 'application_controller'
可能是因为这件事需要改变吗?此外,我正在使用JRuby9.0.0.0,我想我可能会尝试回滚到1.7,看看会发生什么
更新:成功了!
回滚到jruby 1.7,在应用程序_controller.rb上运行jrubyc,并将应用程序_controller.rb的内容替换为
load __FILE__.sub(/.rb$/,'.class')
使用puma和IIS,我的应用程序加载得很好。尝试使用编译的功能。。。它也会这样做,但会创建一个加载.class版本的伪.rb文件(从您的笔记或旧AOT wiki中不清楚您是否明确尝试了该操作)
您应该查看生成的.war文件(它是一个.zip文件)中编译的.rb文件是如何更新的…因此我尝试了,我更新了我的问题以反映发生了什么,并将其返回到1.7,再次尝试使用warbler方法,结果成功了!
cannot import class 'application_controller' as 'application_controller'
load __FILE__.sub(/.rb$/,'.class')