我们在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很好。
答案 0 :(得分:0)
使用已编译的功能尝试Warbler ...它确实相同但创建了一个加载.class版本的虚拟.rb文件(从您的笔记或老AOT维基是否你明确地尝试过了)
你应该查看生成的.war文件(它是.zip)如何更新已编译的.rb文件......