2012-04-12 1 views
0

Моя команда состоит из Rails и Java-разработчиков, работающих вместе над приложением JRuby On Rails. Rails люди предпочитают разрабатывать front-end приложение, используя чистый интерпретатор Ruby. Java-пользователи развертывают приложение в Tomcat и интегрируют его с Spring и базовыми базовыми службами Java.Шаблоны для создания приложений JRuby On Rails, подходящих как для Rails, так и для разработчиков Java

Мы узнаем, какая версия Ruby выполняет проект, чтобы ребята Rails могли разрабатывать его с использованием чистого интерпретатора Ruby.

Например настраиваем конфигурацию базы данных:

module MyWebApp 
    class Application < Rails::Application 
    def config.database_configuration 
     config = super 
     if defined? JRUBY_VERSION 
     config["development"]["adapter"]="jdbcsqlite3" 
     end 
     config 
    end 
    end 
end 

же для Gemfile:

gem 'sqlite3' 
if defined? JRUBY_VERSION 
    gem 'jdbc-sqlite3' 
    gem 'activerecord-jdbcsqlite3-adapter' 
end 

Мы также издеваться основные Java услуги:

class DocumentServiceFactory 
    def build 
    if defined? JRUBY_VERSION 
     spring_context :document_service 
    else 
     mock :document_service 
    end 
    end 
end 

Это решение работает для нас, но мне любопытно, есть ли общие шаблоны (или плагины, драгоценные камни, библиотеки и т. д.) для создания Rails, как Ruby, так и JRuby-friendly?

+0

Вы можете сделать камни java и MRI, поэтому его нужно обрабатывать на уровне драгоценных камней imo. – Reactormonk

+0

Хмммм ... Я не уверен, как изменить адаптер базы данных на уровне gem. Но да, делегирование всей логики переключения MRI/JRuby в драгоценные камни было бы изящным решением. Я сделаю некоторые исследования по этому подходу. Спасибо за предложение. –

ответ

0

есть 3 вещи, чтобы ответить здесь:

  1. там не было необходимости менять database.yml конфигурацию адаптера на некоторое время. просто оставьте его как adapter: sqlite3 или mysql и т. Д. И используйте последние activerecord-jdbc-adapter, например. ActiveRecord-jdbcsqlite3-адаптер

  2. , что, конечно, не правильный способ справиться с JRuby конкретных зависимостей в вашем Gemfile. это намного лучше, если вы используете спецификатор :platform, чтобы Gemfile.lock был согласован и не нужно регенерировать между рубиновыми переключателями, например. :

    gem 'activerecord-jdbcsqlite3-adapter' :platform -> :jruby

  3. для службы издевается там, вероятно, не «лучше» способ, но так как вы говорите, не все ваши использовать rubyist JRuby я бы разоблачить слой службы, например, как REST/Web-сервис, так что вам не нужно издеваться над каждой введенной услугой, и рубисты не сталкиваются с проблемами Java, которые они не понимают (поскольку они не работают на пружинной части), даже если они работают с jruby.

, кроме того, я был очень счастлив с разработкой/тестирование на МРТ и с использованием JRuby в производстве, единственная реальная давка для рубина людей заключается в том, чтобы понять, что они пишут «действительно» threadsafe! код (JRuby стиль) и будьте осторожны при добавлении новых драгоценных камней, чтобы убедиться, что они работают с обеих сторон или имеют альтернативу jruby ... У меня было очень мало несовместимости с драгоценными камнями, отлично работающими на МРТ, но имеющими проблемы с JRuby (может быть, я помню 3). Я, конечно, рекомендую CI (например, Jenkins) провести тесты с JRuby, чтобы поймать их на ранней стадии, когда это возможно.

Смежные вопросы