Я хотел бы знать ситуации, в которых я должен рассмотреть возможность использования рамки, отличной от Rails.Что вы НЕ можете делать в Rails, что вы можете сделать в другой структуре?
ответ
Две вещи. Во-первых, Ruby - относительно молодой язык, и вы можете столкнуться с кирпичными стенами, пытаясь сделать несколько более эзотерические вещи (например, подключиться к основным или более старым типам источников данных). Он также имеет плохой GC, и ни один поток ядра, оба из которых очень важны для высокопроизводительной платформы. Основная кодовая база (MRI) довольно хакерская (много умных запутывающих программных трюков, таких как макросы), и есть части, которые плохо написаны (gc и планирование потоков бросаются в глаза). Опять же, это очень молодая платформа, которая очень популярна очень быстро.
Во-вторых, в то время как рубин язык и рельсы идеи/парадигма являются феноменальными, рубинами и рельсами, платформ нет. В рубинах и рельсах есть чертовски много, и решения для развертывания находятся в темном возрасте по сравнению с тем, что считается нормальным для других платформ (php/asp/jsp).
Обвиняемый в троллинге здесь, поэтому я изложу немного. Из-за модели потоковой обработки Rails не может обрабатывать запросы одновременно, если вы не запускаете несколько полных экземпляров вашего приложения rails. Для этого у вас есть два варианта: относительно молодой и все еще находящийся в стадии разработки пассажир (mod_rails), или проверенный и проверенный балансировщик загрузки apache с несколькими экземплярами mongrel за ним.
В любом случае, отсутствие возможности просто создавать работников-нерестующих означает, что вам понадобится 5-10 полных экземпляров вашего приложения, что приводит к очень большим накладным расходам (может быть легко 300-500megs за приложение в зависимости от ваших драгоценных камней и насколько велико ваше приложение). Из-за этого инфраструктура, необходимая для обслуживания рельсов, - это ад, который намного больше дополняется, чем большинство других вещей.
Теперь, когда говорят, ситуация постоянно улучшается (я имею в виду, что пассажир теперь можно использовать, это был не последний раз, когда мне приходилось иметь дело с развертыванием приложения rails). Я был бы очень удивлен, если рельсы не догонят в ближайшие несколько лет.
Кроме того, рубиний/jruby делают все правильно и идут в отличном темпе. Я не был бы удивлен, если в ближайшие несколько лет МРТ упадет в пользу одной из этих реализаций для работы с основными рельсами.
Ум, решения для развертывания в темные века? lolwut? Существует capistrano для развертывания на сервере и пассажира для запуска приложения. На самом деле вам даже не нужно использовать capistrano, просто загружать и уходить. –
немного разъяснил, я на самом деле не троллировал, и у меня есть причины для того, что я сказал ;-) –
[YARV] (http://en.wikipedia.org/wiki/YARV) - это новая Ruby VM от 1.9, и это делает некоторые улучшения скорости. Он даже начинает работать над улучшением резьбонарезания! –
Ничего себе, способ начать огоньку!
Я собираюсь начать с того, что Rails будет работать для большинства приложений. Однако, если вам нужно выполнить много работы типа асинхронного типа (например, обмен сообщениями между системами, например получение запроса, размещение его в очереди и обработка его в другом потоке или даже на другом компьютере), Rails, вероятно, не является вашим лучший выбор. Ruby, по крайней мере, в настоящее время, не очень силен в многопоточном коде.
Позвольте оскорблениям летать!
Ruby on Rails не пытается стать основой для всех веб-разработок. Если вы собираетесь создать приложение, которое преимущественно создано с использованием CRUD-операций, вы хотите использовать большое количество AJAX, и у вас есть полный контроль над базой данных, тогда Ruby on Rails является одним из нескольких отличных вариантов. Если вы делаете что-то еще, то есть, вероятно, другая структура, которая лучше соответствует вашим требованиям.
Редактировать: Мэтт со вкусом поправил свой ответ :) Я удалил свои комментарии, указав на то, что он исправил.
Да, у Ruby определенно есть некоторые недостатки. Зеленые нити огромные. Но, как сказал Мэтт, все движется в лучшем направлении.
Другие должности в значительной степени зависят от денег. Достаточно простые CRUD-приложения лучше всего подходят для рельсов, хотя - это другие рамки, которые вы можете попробовать в Ruby, которые предлагают большую гибкость.
Вот отличный (и, возможно, я добавляю цель) пример того, где не использовать рельсы: Does the Rails ORM limit the ability to perform aggregations?
Я немного разъяснил свой ответ. У меня нет профессионального опыта работы с динамическими языками, но это не значит, что я предвзятый или неправильный. Недавно я провел много исследований по рельсам, и, надеюсь, более конкретное делает это очевидным. –
Это, по сути, типичная пламенная война, и мне просто надоело ее слышать. Кто-то из вашего лагеря (Microsoft/Sun/Static Languages) говорит, что все из нашего лагеря полностью забиты, и нам предстоит долгий путь, ха-ха. Это просто портит меня по-другому, так как я так его вижу. –
Это говорит о том, что вы правы в том, о чем вы упоминаете, хотя я думаю, что внешние ссылки/базовые фрагменты кода, поддерживающие ваши аргументы, сделают это еще более менее троллинговым и более хорошо исследованным сообщением, информирующим других о том, что вы узнали. –
- 1. Что вы не можете сделать в C, что вы можете сделать в Objective-C?
- 2. Что вы можете сделать в WinAPI, что вы не можете сделать в Qt?
- 3. Что вы можете делать с System.DirectoryServices.Protocols.ExtendedRequest?
- 4. Что вы можете сделать с PyDictValues_Type?
- 5. Есть ли что-то, что вы можете сделать со связью, с которой вы не можете справиться?
- 6. вы можете объяснить, что делать, и что делает?
- 7. Git - Можете ли вы сделать что-то с rebase, которое вы не можете сделать слиянием?
- 8. Что вы можете делать с холстом, а не с SVG?
- 9. Что вы не можете сделать с Angular.js из коробки, которую вы можете сделать с помощью jQuery
- 10. Что делать, если вы не можете вызвать [super init] вначале
- 11. Можете ли вы сделать все с помощью grep, что вы можете сделать с egrep?
- 12. Что делать, если вы не можете сохранить пароль как хэш
- 13. Что вы можете делать с COM/ActiveX в Python?
- 14. Проблема в том, что вы не можете сделать маркеры.
- 15. Что могут делать дженерики, что вы не можете сделать с композицией?
- 16. Что вы можете сделать с Excel vba, вы не можете с помощью C#
- 17. Можете ли вы перечислить значения в структуре?
- 18. Что вы можете связать в NSTableColumn NSPopupButtonCell?
- 19. Есть ли что-нибудь, что вы можете сделать с событием C#, которое вы не можете сделать с событием VB?
- 20. Есть ли что-нибудь, что вы можете сделать на C++, чего вы не можете сделать на C#?
- 21. Что вы можете делать с плагинами Microsoft Outlook
- 22. Что вы не можете использовать для идентификатора?
- 23. Что вы можете сделать в методе ant Task.init()?
- 24. Что вы можете сделать в ColdFusion в одной строке?
- 25. Можете ли вы сделать метод == другой метод?
- 26. Можете ли вы объяснить, что эта команда будет делать
- 27. Что вы можете сделать в визуальном режиме Vim, который вы не можете сделать в командном режиме, и наоборот?
- 28. Что вы можете сделать в :: OnInitDialog() Visual Studio 2008 C++
- 29. Что вы можете сделать с SharePoint в Интранете?
- 30. Вы можете сделать HTML «onwrap»
Downvote. Название просто воспалительное. Не говоря уже о том, что это длиннее самого вопроса. – Otto
? Похоже на разумный вопрос. – Zach