2015-06-25 3 views
0

У нас есть приложение 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.

ответ

0

попробуйте Warbler с скомпилирован функция ... она делает ~ то же самое, но создает файл фиктивного .rb, который загружает.(не понятно из ваших заметок или старой AOT wiki, пытались ли вы это явно)

Вы должны заглянуть внутрь сгенерированного файла .war (это .zip), как обновлены скомпилированные файлы .rb ...

+0

Итак, я попробовал это, обновляю свой вопрос, чтобы отразить то, что произошло –

+0

Поднял назад к 1.7, снова попытался с помощью метода warbler, и это сработало! –