Конечно то, что много компиляторов там используют рекурсию в большой степени. Языки программирования являются по сути рекурсивными сами (т.е. можно встроить 'если' операторы в другом 'если' операторы, и т.д.).
Краткий ответ
Перейти с Apache / Nginx + Passenger. Passenger - быстрый , надежный, простой в настройке и развертывании. Passenger был принят в большом количестве крупных приложений Rails, включая Shopify .
(источник: modrails.com )
Подробный ответ
Забудьте о CGI и FastCGI. Вначале не было других альтернатив, поэтому единственным способом запустить Rails было использование CGI или более быстрого браузера FastCGI. В настоящее время почти никто не запускает Rails под CGI. Последние версии Rails больше не предоставляют исполнителей .cgi и .fcgi.
Mongrel был широко распространенным решением, лучшей заменой CGI и FCGI. Многие сайты по-прежнему используют кластеры Mongrel и Mongrel, Кроме того, архитектуру на основе Mongrel довольно сложно настроить, потому что для нее требуется внешний прокси (тонкий, ngnix) и внутренняя архитектура, состоящая из нескольких экземпляров Mongrel.
Passenger привлекает всеобщее внимание с момента его выпуска. Многие проекты перешли с Mongrel на Passenger по многим причинам, включая (но не ограничиваясь) простоту развертывания, ремонтопригодность и производительность. Кроме того, теперь Passenger доступен как для Apache, так и для Ngnix.
Самый простой способ использовать Passenger - это конфигурация Apache + Passenger. Одна установка Apache и несколько процессов Passenger.
Если вам нужна лучшая производительность и масштабируемость, вы можете использовать Ngnix в качестве внешнего прокси и перенаправлять все запросы Rails на несколько внутренних серверов, каждый из которых состоит из Apache + Passenger. Я не буду вдаваться в технические детали, это решение предназначено для использования в проектах Rails с высоким уровнем трафика.
Еще более сложные решения включают комбинацию различных уровней, включая http-прокси и серверы. Вы можете понять, о чем я говорю, прочитав некоторые внутренние детали из GitHub и Heroku .
На данный момент Passenger - лучший ответ для большинства проектов Rails.
Mongrel и Thin - это отдельные серверы процессов Ruby, которые можно запускать несколько в качестве кластера за прокси-сервером какого-либо типа (например, Apache или Nginx). Прокси-сервер будет управлять тем, какой экземпляр Mongrel или Thin обслуживает запросы.
Passenger создает интерфейс между Apache или Nginx, который создает процесс создания приложения, а затем разветвляет процессы для обработки входящих запросов по мере их поступления. Их много. параметров конфигурации, определяющих, как долго эти процессы живут, сколько их может быть и сколько запросов они будут обслуживать, прежде чем прекратят работу. Это, безусловно, наиболее распространенный способ масштабирования и обработки приложения с высоким трафиком, но он не лишен недостатков. Это можно сделать только в операционной системе * nix (Linux, Mac OS X и т. Д.). Кроме того, эти процессы запускаются по запросу, поэтому, если никто не обращается к вашему сайту в течение некоторого времени, они умирают, и следующий запрос имеет задержку, когда он снова запускается. С Mongrel и Thin процесс всегда запущен. Иногда, однако, то, что ваши новые и свежие процессы могут быть полезны для использования памяти и т. Д.
Если это будет сайт с относительно низким трафиком, Mongrel или Thin предоставляют простой и легкий в управлении способ развертывания приложения. Для сайтов с высоким трафиком, где вам нужна интеллектуальная организация очередей и управление процессами, как у Passenger, это очень хорошее решение.
Что касается fastcgi, вы, вероятно, захотите использовать его в качестве последнего варианта.
Ваши новые и свежие процессы могут быть полезны для использования памяти и т. д.Если это будет сайт с относительно низким трафиком, Mongrel или Thin предоставляет простой и легкий в управлении способ развертывания приложения. Для сайтов с высоким трафиком, где вам нужна интеллектуальная организация очередей и управление процессами, как у Passenger, это очень хорошее решение.
Что касается fastcgi, вы, вероятно, захотите использовать его в качестве последнего варианта.
Ваши новые и свежие процессы могут быть полезны для использования памяти и т. д.Если это будет сайт с относительно низким трафиком, Mongrel или Thin предоставляет простой и легкий в управлении способ развертывания приложения. Для сайтов с высоким трафиком, где вам нужна интеллектуальная организация очередей и управление процессами, как у Passenger, это очень хорошее решение.
Что касается fastcgi, вы, вероятно, захотите использовать его в качестве последнего варианта.
Я использую Passenger + nginx. Это действительно очень хорошо работает.
Чтобы мгновенно похвастаться производительностью с пассажиром, я рекомендую использовать ruby Enterprise Edition.