2010-08-30 1 views
1

Я сделал несколько проектов, используя Ruby on Rails. Я собираюсь использовать JRuby на Rails и размещать его на GAE. В этом случае то, что мне нужно знать при разработке приложений JRuby. Я читал, чтоЧто мне нужно знать о JRuby on Rails после разработки RoR-приложений?

  • JRuby имеет тот же синтаксис
  • я могу получить доступ к Java-библиотеки
  • JRuby не имеет доступа к некоторым драгоценные камни/плагины
  • JRuby приложение будет занять некоторое время, чтобы загрузить в первый раз , так что я должен держать его в живых, отправив запрос каждые 5 минут или так
  • я не могу использовать ActiveRecord и вместо этого я должен DataMapper

Пожалуйста, исправьте, если я ошибаюсь в отношении каких-либо заявлений, которые я сделал, и есть ли что-нибудь еще, что я должен знать? Нужно ли начинать читать о JRuby с нуля, или я могу, как обычно, разрабатывать приложения Ruby?

ответ

3

Я использую JRuby каждый день.

True:

  • JRuby имеет тот же синтаксис
  • JRuby не имеет доступа к некоторым драгоценные камни/плагины
  • я могу получить доступ к Java библиотекам

Некоторые драгоценные камни/плагины имеют jruby-конкретные версии, некоторые не работают вообще. В общем, я обнаружил несколько проблем, и поскольку библиотеки и платформы созрели, многие проблемы исчезли (JRuby стал намного лучше).

Вы можете получить доступ к Java, но, в общем, зачем вам это нужно?

Ложные:

  • JRuby приложение займет некоторое время, чтобы загрузить в первый раз, так что я должен держать его в живых, отправив запрос через каждые 5 минут или так
  • я не могу использовать ActiveRecord и вместо этого я должен DataMapper

Хотя я предполагаю, что можно представить себе установку сервера, на котором начальная стоимость запуска/прогрева в JVM означает, что вы должны пинговать сервер, нет ничего присущего JRuby, которые делают Это правда. Если вам нужно сохранить сервер в живых, вы должны посмотреть на свою среду развертывания. Что-то подобное происходит в режиме общего хостинга с пассажиром, где приложение может выйти из памяти после периода бездействия.

Кроме того, мы используем ActiveRecord без каких-либо проблем.

+0

Спасибо за ответ. У меня есть еще один вопрос. JRuby - это реализация Ruby 1.8.7 с проблемами производительности. Не могли бы вы рассказать мне, неужели у JRuby есть такие проблемы? – felix

+1

Некоторые из характеристик производительности 1.8.x относятся к потоку и GIL в Ruby VM. У JRuby нет этих проблем, поскольку он зависит от модели JVM и JVM. В целом профиль производительности совершенно другой. –

+0

Спасибо :). – felix

1

afaik, rails 3 на 100% совместим с jruby, поэтому на этом пути не должно быть никаких проблем.

Как и любая новая платформа, вы должны довольствоваться этим, играя с jruby. Я рекомендую использовать RVM для этого.

, насколько идут вас вопросы:

  • JRuby это просто другая среда, как МРТ или Rubinus
  • поскольку JRuby находится в пределах виртуальной машины Java с помощью Java очень легко, но вы также можете использовать RJB от МРТ
  • некоторые драгоценные камни несовместимы, когда они используют собственные библиотеки c, которые не запускаются на JRuby
  • JVM и ваш контейнер приложения требуют времени запуска и некоторого времени для загрузки вашего приложения, но это все, нет нужно сохранить, это неправильно
  • вы можете использовать все, что вы хотите, большинство драгоценных камней обновляются, чтобы быть совместимым с JRuby
+0

Спасибо за ваш ответ :) – felix

0

@TobyHede в основном были обсуждены вопросы, которые вы думали о вас, возможно, поэтому я оставлю его в этом.

Что касается других вещей, которые нужно иметь в виду, это просто отличный переводчик, и в нем будут возникать смешные несоответствия, которые потребуют некоторой адаптации.

  1. некоторые методы реализованы по-разному, например, как sleep 10.seconds выбросит исключение (вы должны sleep 10.seconds.to_i), и я помню, как NoMethodError на классе Symbol при переходе от МРТ JRuby (не помню, какой метод не был реализован) , только иметь в виду незначительные вариации будут там
  2. вы будете испытывать зависания и исключение в драгоценных камнях, которые в противном случае работали для вас (подглядывать, например, при включении более одной страницы)
  3. некоторых драгоценные камни могут работать по-разному, подсматривать (снова) выйдет, если вы нажмете ctrl + c, например, довольно раздражает
  4. немного медленнее, время загрузки всего и не Зевсой
  5. вы получите случайные стек Java исключения следов без указания на какую строку коды рубинового это произошло
  6. Timeout.timeout часто не будет работать, как и следовало ожидать, когда его оборачивают вокруг чистого кода и звезды плохо согласуются (это в основном было зафиксировано в ядре jruby, но, похоже, проблема связана с драгоценными камнями, которые делают свой собственный netcode в чистой java)
  7. скрытые проблемы с безопасностью потоков в стороннем коде How do you choose gems for a high throughput multithreaded Rails app? - избегайте из EventMachine, например,
  8. нити будут потрясающими (из-за естественности и отсутствия gil), а волокна сосут (из-за t o отсутствие поддержки сопроцессора в JVM - это обычные потоки), поэтому вы часто не получаете повышения производительности с целлулоидом по сравнению с MRI
  9. Вы использовали для запуска своих рельсов с помощью MRI Ruby в качестве процессов в ОС, вы знали, как отслеживать их PID, раздувать, запускать время, убивать их, контролировать их и т. д., эта часть не очевидна при переключении на JRuby, потому что все обратилось к потокам в одном процессе.В Java-мире есть очень хорошие инструменты для решения этих проблем, но что-то вам нужно будет узнать.
  10. killall -9 ruby не делает трюк с jruby, когда ваша консоль зависает (что часто бывает раньше), вы должны ps -ef и затем отслеживать правильные процессы, не убивая ваших небедов и т. д. (незначительный, но раздражающий)
  11. из-за моего последнего момента, зная Java и JVM, вы сможете выйти из узких мест в определенных ситуациях (в зависимости от того, что вы намереваетесь сделать это может быть что-то, что вам действительно нужно действительно необходимо), выбор сервера развертывания будет увеличивать или уменьшать эту потребность (например, для этого важна важная информация, другие варианты развертывания могут быть проще, см. http://thenerdings.blogspot.com/2012/09/pulling-plug-on-torquebox-and-jruby-for.html)
  12. ...

Кроме того, увидеть, что команда JRuby говорит о различиях, https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby

Но да, в противном случае его «так же, как МРТ Рубин» :)

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

  • Нет связанных вопросов^_^