2009-02-02 4 views
1

Я хотел бы знать ситуации, в которых я должен рассмотреть возможность использования рамки, отличной от Rails.Что вы НЕ можете делать в Rails, что вы можете сделать в другой структуре?

+0

Downvote. Название просто воспалительное. Не говоря уже о том, что это длиннее самого вопроса. – Otto

+0

? Похоже на разумный вопрос. – Zach

ответ

2

Две вещи. Во-первых, Ruby - относительно молодой язык, и вы можете столкнуться с кирпичными стенами, пытаясь сделать несколько более эзотерические вещи (например, подключиться к основным или более старым типам источников данных). Он также имеет плохой GC, и ни один поток ядра, оба из которых очень важны для высокопроизводительной платформы. Основная кодовая база (MRI) довольно хакерская (много умных запутывающих программных трюков, таких как макросы), и есть части, которые плохо написаны (gc и планирование потоков бросаются в глаза). Опять же, это очень молодая платформа, которая очень популярна очень быстро.

Во-вторых, в то время как рубин язык и рельсы идеи/парадигма являются феноменальными, рубинами и рельсами, платформ нет. В рубинах и рельсах есть чертовски много, и решения для развертывания находятся в темном возрасте по сравнению с тем, что считается нормальным для других платформ (php/asp/jsp).

Обвиняемый в троллинге здесь, поэтому я изложу немного. Из-за модели потоковой обработки Rails не может обрабатывать запросы одновременно, если вы не запускаете несколько полных экземпляров вашего приложения rails. Для этого у вас есть два варианта: относительно молодой и все еще находящийся в стадии разработки пассажир (mod_rails), или проверенный и проверенный балансировщик загрузки apache с несколькими экземплярами mongrel за ним.

В любом случае, отсутствие возможности просто создавать работников-нерестующих означает, что вам понадобится 5-10 полных экземпляров вашего приложения, что приводит к очень большим накладным расходам (может быть легко 300-500megs за приложение в зависимости от ваших драгоценных камней и насколько велико ваше приложение). Из-за этого инфраструктура, необходимая для обслуживания рельсов, - это ад, который намного больше дополняется, чем большинство других вещей.

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

Кроме того, рубиний/jruby делают все правильно и идут в отличном темпе. Я не был бы удивлен, если в ближайшие несколько лет МРТ упадет в пользу одной из этих реализаций для работы с основными рельсами.

+0

Ум, решения для развертывания в темные века? lolwut? Существует capistrano для развертывания на сервере и пассажира для запуска приложения. На самом деле вам даже не нужно использовать capistrano, просто загружать и уходить. –

+0

немного разъяснил, я на самом деле не троллировал, и у меня есть причины для того, что я сказал ;-) –

+0

[YARV] (http://en.wikipedia.org/wiki/YARV) - это новая Ruby VM от 1.9, и это делает некоторые улучшения скорости. Он даже начинает работать над улучшением резьбонарезания! –

1

Ничего себе, способ начать огоньку!

Я собираюсь начать с того, что Rails будет работать для большинства приложений. Однако, если вам нужно выполнить много работы типа асинхронного типа (например, обмен сообщениями между системами, например получение запроса, размещение его в очереди и обработка его в другом потоке или даже на другом компьютере), Rails, вероятно, не является вашим лучший выбор. Ruby, по крайней мере, в настоящее время, не очень силен в многопоточном коде.

Позвольте оскорблениям летать!

2

Ruby on Rails не пытается стать основой для всех веб-разработок. Если вы собираетесь создать приложение, которое преимущественно создано с использованием CRUD-операций, вы хотите использовать большое количество AJAX, и у вас есть полный контроль над базой данных, тогда Ruby on Rails является одним из нескольких отличных вариантов. Если вы делаете что-то еще, то есть, вероятно, другая структура, которая лучше соответствует вашим требованиям.

2

Редактировать: Мэтт со вкусом поправил свой ответ :) Я удалил свои комментарии, указав на то, что он исправил.

Да, у Ruby определенно есть некоторые недостатки. Зеленые нити огромные. Но, как сказал Мэтт, все движется в лучшем направлении.

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

Вот отличный (и, возможно, я добавляю цель) пример того, где не использовать рельсы: Does the Rails ORM limit the ability to perform aggregations?

+0

Я немного разъяснил свой ответ. У меня нет профессионального опыта работы с динамическими языками, но это не значит, что я предвзятый или неправильный. Недавно я провел много исследований по рельсам, и, надеюсь, более конкретное делает это очевидным. –

+0

Это, по сути, типичная пламенная война, и мне просто надоело ее слышать. Кто-то из вашего лагеря (Microsoft/Sun/Static Languages) говорит, что все из нашего лагеря полностью забиты, и нам предстоит долгий путь, ха-ха. Это просто портит меня по-другому, так как я так его вижу. –

+0

Это говорит о том, что вы правы в том, о чем вы упоминаете, хотя я думаю, что внешние ссылки/базовые фрагменты кода, поддерживающие ваши аргументы, сделают это еще более менее троллинговым и более хорошо исследованным сообщением, информирующим других о том, что вы узнали. –

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