У нас есть приложение RoR, работающее на сервере Windows 2012 R2 с использованием IIS, jruby и puma в сети клиентов. Производственное приложение отлично работает! Единственная проблема в том, что нам нужно каким-то образом защитить исходный код путем обфускации. Моя первоначальная мысль заключалась в том, что мы могли компилировать файлы .rb в файлы .class, чтобы jruby мог переваривать их вместо файлов .rb. Поэтому я попробовал это с одним файлом, чтобы посмотреть, смогу ли я заставить его работать. Я перемещаться к MYAPP/приложение/контроллеры и ...Компиляция AOT с jRuby для обфускации Код Rails
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 в application_controller» Im угадывание из-за подчеркивания в имени класса.
По существу, я пытаюсь заставить мое приложение rails работать с .class-файлами вместо файлов .rb.
UPDATE: Так что я пытался использовать камышевка создать скомпилированную Войну
jruby -S warble compiled war
Затем я извлек .war в TOMCAT контейнер, чтобы посмотреть на содержимом .RB файлов. Они все lõoke так:
load __FILE__.sub(/.rb$/,'.class')
Так что я пытался принимать этот фрагмент и положить его в моем application_controller.rb работает на пуму. Я JRuby -S рельсы сервер, и получил следующие error-
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'
Может быть, это должен быть верблюд? Также я использую jRuby 9.0.0.0, я думаю, что могу попробовать и откат до 1.7 и посмотреть, что произойдет.
ОБНОВЛЕНИЕ: ЭТО РАБОТАЕТ! откат к JRuby 1.7, побежал jrubyc на application_controller.rb и заменить application_controller.rb содержимое с
load __FILE__.sub(/.rb$/,'.class')
и мое приложение загружается нормально, используя пуму с IIS.
Итак, я попробовал это, обновляю свой вопрос, чтобы отразить то, что произошло –
Поднял назад к 1.7, снова попытался с помощью метода warbler, и это сработало! –