Что мне нужно знать о JRuby on Rails после разработки приложений RoR? - PullRequest
1 голос
/ 30 августа 2010

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

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

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

Ответы [ 3 ]

3 голосов
/ 30 августа 2010

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

True:

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

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

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

False:

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

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

Кроме того, мы используем ActiveRecord без проблем вообще.

1 голос
/ 30 августа 2010

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

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

, насколько вам нужно:

  • JRuby - это просто другая среда выполнения, такая как MRI или Rubinus
  • , поскольку JRuby находится вJVM с использованием Java очень прост, но вы также можете использовать RJB из MRI
  • , некоторые гемы не совместимы, когда они используют собственные библиотеки c, которые не работают на JRuby
  • JVM иКонтейнеру вашего приложения требуется время запуска и некоторое время для загрузки приложения, но это все, в поддержании активности нет необходимости, это неправильно
  • вы можете использовать все, что захотите, большинство гемов обновлены для совместимостис JRuby
0 голосов
/ 04 января 2014

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

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

  1. некоторые методы реализованы по-разному, например sleep 10.seconds сгенерирует исключение (вам нужно sleep 10.seconds.to_i), и я помню, как получал NoMethodError в классе Symbol при переключении с MRI наJRuby (не помню, какой метод не был реализован), просто имейте в виду, что будут небольшие изменения
  2. вы будете испытывать зависания и исключения в гемах, которые в противном случае работали бы для вас (pryнапример, при перечислении более одной страницы)
  3. некоторые драгоценные камни могут работать по-разному, pry (снова) завершится, если вы нажмете, например, Ctrl + C, довольно раздражает
  4. немного медленнее время загрузки всегои без Zeus
  5. вы получите случайные трассировки стека Java-исключений без указания, на какой строке ruby ​​он кодируетсяСлучалось
  6. Timeout.timeout часто не работает должным образом, если его обернуть вокруг чистого кода и звездочки плохо совмещаются (это в основном исправлено в ядре jruby, но, похоже, все еще проблема с гемами, которые делают свои собственныеnetcode на чистом Java)
  7. скрытые проблемы с безопасностью потоков в стороннем коде Как вы выбираете гемы для многопоточного приложения Rails с высокой пропускной способностью? - держитесь подальше от EventMachine, например
  8. потоки будут отличными (из-за нативности и отсутствия gil), а волокна будут сосать (из-за отсутствия поддержки сопрограмм в JVM, это обычные потоки), поэтому вы часто не получаете повышения производительности с целлулоидом по сравнениюдо MRI
  9. , который вы использовали для запуска своих рельсов с помощью MRI Ruby в качестве процессов в ОС, вы знали, как отслеживать их PID, раздувать, выполнять, убивать их, контролировать их и т. д., эта часть не очевидна, когда выпереключитесь на JRuby, потому что все превратилось в потоки в одном процессе.В мире Java есть очень хорошие инструменты для решения этих проблем, но вы должны научиться этому
  10. killall -9 ruby не справляется с jruby, когда ваша консоль зависает (что он делает чаще, чем раньше)вам нужно ps -ef, а затем отслеживать правильные процессы, не убивая ваших сетевых компонентов и т. д. (незначительные, но раздражающие)
  11. из-за моего последнего замечания, знание Java и JVM поможет вам выбраться из трудных мест вВ определенных ситуациях (в зависимости от того, что вы намереваетесь сделать, это может быть то, что вам действительно нужно , действительно нужно ), выбор сервера развертывания увеличит или уменьшит эту потребность (например, Torbox Box немного печально известен, другие варианты развертывания)может быть проще, см. http://thenerdings.blogspot.com/2012/09/pulling-plug-on-torquebox-and-jruby-for.html)
  12. ...

Также посмотрите, что команда jruby говорит о различиях, https://github.com/jruby/jruby/wiki/DifferencesBetweenMriAndJruby

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

...