Весь вопрос настройки сервера разработки для моего приложения Ruby on Rails смущает меня. Я уверен, что есть WEBrick, Mongrel, Passenger, Apache, Nginx и многие другие, и я не совсем понимаю, какую роль они играют.
Я начал использовать WEBrick, а теперь использую Mongrel для разработки. Являются ли эти серверы автономными или они располагаются перед Apache?
Я читал о Passenger, и я не совсем понимаю, что это такое, на сайте написано, что «делает развертывание веб-приложений Ruby быстрым», заменяет ли оно Mongrel? Это как Capistrano, который также развертывает веб-приложения?
Учитывая, что я хотел бы протестировать SSL, и я считаю, что он не поддерживается mongrel, какова лучшая настройка сервера разработки?
Спасибо
Ответы:
Слово «развертывание» может иметь два значения в зависимости от контекста. Вы также путаете роли Apache / Nginx с ролями других компонентов.
Историческая справка. Эта статья была первоначально написана 6 ноября 2010 года, когда экосистема сервера приложений Ruby была ограничена. Я обновил эту статью 15 марта 2013 года всеми последними обновлениями в экосистеме.
Отказ от ответственности : я являюсь одним из авторов Phusion Passenger, одного из серверов приложений.
Апач против Nginx
Они оба веб-сервера. Они могут обслуживать статические файлы, но - с правильными модулями - также могут обслуживать динамические веб-приложения, например, написанные на PHP. Apache более популярен и имеет больше функций, Nginx меньше и быстрее и имеет меньше функций.
Ни Apache, ни Nginx не могут работать с готовыми веб-приложениями на Ruby, для этого вам нужно использовать Apache / Nginx в сочетании с каким-либо дополнением, описанным ниже.
Apache и Nginx также могут выступать в качестве обратных прокси, что означает, что они могут принимать входящий HTTP-запрос и пересылать его на другой сервер, который также говорит по HTTP. Когда этот сервер отвечает HTTP-ответом, Apache / Nginx пересылает ответ обратно клиенту; Позже вы узнаете, почему это актуально.
Mongrel и другие производственные серверы приложений против WEBrick
Mongrel - это «сервер приложений» на Ruby. В определенном смысле это означает, что Mongrel - это приложение, которое:
Однако дворняга довольно устарела, в настоящее время она больше не поддерживается. Более новые альтернативные серверы приложений:
Я расскажу о них позже и опишу, как они отличаются друг от друга и от беспородных.
WEBrick делает то же самое, что и Mongrel, но различия заключаются в следующем:
Сервер приложений и мир
Все текущие серверы приложений Ruby используют HTTP, однако некоторые серверы приложений могут быть напрямую подключены к Интернету через порт 80, а другие - нет.
Почему некоторые серверы приложений должны находиться за обратным прокси-сервером?
Почему некоторые серверы приложений могут быть напрямую подключены к Интернету?
Сравнение серверов приложений
В этом разделе я сравню большинство серверов приложений, которые я упомянул, но не Phusion Passenger. Phusion Passenger настолько отличается от остальных, что я выделил ему специальный раздел. Я также опустил Trinidad и TorqueBox, потому что я не знаю их достаточно хорошо, но они все равно актуальны, если вы используете JRuby.
Phusion Passenger
Phusion Passenger работает совсем не так, как все остальные. Phusion Passenger интегрируется непосредственно в Apache или Nginx, поэтому его можно сравнить с mod_php для Apache. Подобно тому, как mod_php позволяет Apache обслуживать приложения PHP почти волшебным образом, Phusion Passenger позволяет Apache (и также Nginx!) Обслуживать приложения Ruby почти волшебным образом. Цель Phusion Passenger - сделать так, чтобы все Just Work (tm) было как можно меньше хлопот.
Вместо запуска процесса или кластера для вашего приложения и настройки Apache / Nginx для обслуживания статических файлов и / или запросов обратного проксирования в процесс / кластер с помощью Phusion Passenger вам нужно только:
Все настройки выполняются в конфигурационном файле веб-сервера. Phusion Passenger автоматизирует практически все. Нет необходимости запускать кластер и управлять процессами. Запуск / остановка процессов, их перезапуск при сбое и т. Д. - все автоматизировано. По сравнению с другими серверами приложений Phusion Passenger имеет гораздо меньше движущихся частей. Эта простота использования является одной из основных причин, почему люди используют Phusion Passenger.
Также в отличие от других серверов приложений, Phusion Passenger в основном написан на C ++, что делает его очень быстрым.
Существует также версия Phusion Passenger для предприятий с еще более широкими возможностями, такими как автоматический повторный запуск, поддержка многопоточности, устойчивость к ошибкам развертывания и т. Д.
По вышеуказанным причинам Phusion Passenger в настоящее время является самым популярным сервером приложений Ruby, на котором работают более 150 000 веб-сайтов, включая такие крупные, как New York Times, Pixar, Airbnb и т. Д.
Phusion Passenger против других серверов приложений
Phusion Passenger предоставляет гораздо больше возможностей и предоставляет множество преимуществ по сравнению с другими серверами приложений, такими как:
Рабочие нагрузки, в которых Unicorn не очень хороши:
Модель гибридного ввода-вывода в Phusion Passenger Enterprise 4 или более поздней версии делает ее отличным выбором для такого рода рабочих нагрузок.
Есть больше возможностей и преимуществ, но список действительно длинный. Вы должны обратиться к всестороннему руководству Phusion Passenger ( версии Apache , Nginx версия ) или на веб - сайт пассажирской Phusion для информации.
Модели параллелизма ввода / вывода
Недавно в блоге Phusion была опубликована статья об оптимальной настройке количества процессов и потоков с учетом вашей рабочей нагрузки. См. Настройка параметров параллелизма Phusion Passenger .
Capistrano
Capistrano - это нечто совершенно другое. Во всех предыдущих разделах «развертывание» относится к процессу запуска приложения Ruby на сервере приложений, так что оно становится доступным для посетителей, но прежде чем это произойдет, обычно необходимо выполнить некоторые подготовительные действия, такие как:
В контексте Capistrano «развертывание» означает выполнение всей этой подготовительной работы. Capistrano не является сервером приложений. Это инструмент для автоматизации всей подготовительной работы. Вы сообщаете Capistrano, где находится ваш сервер и какие команды нужно запускать каждый раз, когда вы развертываете новую версию своего приложения, а Capistrano позаботится о том, чтобы загрузить приложение Rails на сервер и выполнить указанные вами команды.
Capistrano всегда используется в сочетании с сервером приложений. Он не заменяет серверы приложений. Наоборот, серверы приложений не заменяют Capistrano, их можно использовать в сочетании с Capistrano.
Конечно, вам не нужно использовать Capistrano. Если вы предпочитаете загружать приложение Ruby с FTP и вручную каждый раз выполнять одни и те же шаги команд, то вы можете это сделать. Другие люди устали от этого, поэтому они автоматизируют эти шаги в Капистрано.
источник