Phusion Passenger (для чайников!)
Я опытный разработчик LAMP, перемещающийся в Rails. У меня очень глупый вопрос: что, черт возьми, делает Phusion Passenger?
Я прочитал много документации, я googled, я читал Википедию, я читал "Переполнение стека". Я даже установил его и получил его на машине разработки (с Apache). Я все еще не знаю, что это на самом деле делает.
Вот одна догадка: мне кажется странным, что корень документа Apache указывает на /mywebapp/public/
вместо /mywebapp/
, поэтому я предполагаю, что он имеет отношение к тому, чтобы сделать все внутри /mywebapp/
доступным. (Это дикое предположение, хотя, основываясь на том факте, что я не знаю, как еще к этому материалу попадают.)
Я понял, что Пассажир революционный, новаторский и т.д. и т.д., но что он делает??
Извините за вопрос n00b, все. Спасибо!
Ответы
Ответ 1
Пассажир - это система для подготовки и запуска экземпляров Ruby для использования с приложениями на базе Rack, такими как Ruby on Rails. Apache и nginx, обе поддерживаемые платформы веб-серверов, не могут запускать Ruby, как они могут PHP, Perl или Python, потому что нет встроенного в Ruby модуля, который работает так же хорошо, как это делают. Это означает, что Ruby имеет тенденцию работать как независимая группа процессов, которым веб-сервер должен будет направлять трафик через.
Rails имеет тенденцию работать как постоянный процесс, потому что время запуска для всего пакета является значительным. Пассажир запускает новые экземпляры, поскольку они необходимы, и уничтожит те, которые больше не требуются. Вы можете увидеть это в списке процессов, поскольку они четко идентифицированы с префиксами "Пассажир" и "Rails".
Одна из особенностей Passenger заключается в повторном использовании части Rails-стека, чтобы быстрее создавать дополнительные процессы, клонируя один экземпляр вместо того, чтобы откручивать новый с нуля. Загрузчик написан на С++ и позволяет правильно настраивать и запускать каждый процесс Ruby максимально эффективно, а также помогает экономить память, делясь ею между различными процессами.
Причина, по которой вы размещаете вещи из каталога public/
, заключается в том, чтобы не подвергать риску вашу прикладную кодовую базу. PHP необходимо правильно настроить, чтобы люди не просто просматривали каталоги и не загружали источник, потому что не было никакого конкретного различия между статическим контентом и исполняемыми скриптами. Например, неправильно сконфигурированный сервер с радостью будет обслуживать необработанные файлы .php, а не запускать их.
Пассажир не совсем революционен, но в нем очень много важных функций. Что отличает его от того, что он работает очень хорошо и не требует большого внимания. Из коробки он в значительной степени готов к работе.
Ответ 2
Он обслуживает рубины на приложениях rails (на самом деле любое приложение в стойке). Я был использован с версией 2.x для интеграции пакета в apache, но с новой версией, которая поддерживает автономное выполнение, я предпочитаю запускать ее в автономном режиме (в сочетании с rvm)
Это может быть очень полезно как в режиме разработки, так и в режиме производства и ускоряет выполнение приложения RoR.
Для развертывания приложения RoR я устанавливаю его со своим собственным gemset, а затем устанавливаю пассажира в этом gemset с помощью gem install passenger
(вы также можете безопасно пропускать gemsets, но они будут изолировать среду приложения, поэтому приятно иметь их). После этого вы можете запустить приложение с passenger start -a 127.0.0.1 -p 3081 -e production
в корне проекта.
Затем я настраиваю apache vhost для работы в режиме обратного прокси с файлом, подобным этому
<VirtualHost *:80>
ServerName your.server.org
ProxyPass / http://localhost:3081/
ProxyPassReverse / http://localhost:3081/
ProxyRequests Off
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
<Proxy http://localhost:3081/*>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
и все в порядке, ваше приложение развернуто с его локальной конфигурацией, оно даже не требует прав root (для пассажирской части).