Развертывание небольшого приложения на Rails - предложения?
Мы работали над небольшой системой Ruby On Rails (ruby 1.8, rails 3.0.1) для нашего школьного финального проекта; Во время разработки мы тестировали на наших машинах разработки и Linux-сервере в нашей локальной сети, используя WEBrick. Для развертывания нам был предоставлен VPS с Debian squeeze/sid и свободными руками. варианты развертывания (другими словами: "разберись сам":)).
На сайте не будет большого объема трафика, поэтому запуск развернутого WEBrick, вероятно, сработает - но это неправильно, и, учитывая, что это учебный проект, мы хотели бы сделать что-то хотя бы полу-правильно. Кроме того, нам нужно сжатие gzip, поскольку частью приложения rails является веб-сервис json, который будет обслуживать умеренный объем данных - и, насколько я могу судить, серверы ruby обычно не поддерживают это.
В последние несколько дней я много гуглил, чтобы изучить различные варианты, и зови, что есть много! Единственное, что я упреждаю, это Apache, в основном потому, что я хочу попробовать что-то новое, и отчасти потому, что это немного... неуклюже.
Прямо сейчас я исследую Чероки + Тонкий, который кажется приличным, но я очень открыт для предложений, если есть что-то более подходящее. Я сталкивался с серверами lighttpd, hiawata и nginx, и я видел упоминания о серверах mongrel, пассажирских и единороговых рубинах - там определенно много возможных перестановок!
Для тестирования мы в настоящее время настраиваем SSH-туннели и используем etc/hosts для сопоставления appname.local с 127.0.0.1 - регистрация правильного домена и пробивание дырок в брандмауэре произойдет позже. Основным следствием этого является то, что httpd работает на порту 80, но из-за туннелирования SSH Host:
часть заголовка HTTP-запроса содержит номер туннельного порта.
Чтобы, надеюсь, превратить эти разговоры в соответствующий пост, вот несколько вопросов:
- При использовании сервера Thin ruby за другим "внешним интерфейсом" httpd может ли один экземпляр обрабатывать (без очереди) несколько одновременных запросов rails, или он может делать это только при использовании его в качестве внешнего интерфейса? Должны ли мы использовать их пул на разных портах?
- В настоящее время мы помещаем приложение rails в / var / rails / appname, а символическую ссылку / var / rails / appname / public в / var / www / appname и владеем всем
www-data
, Имеет ли этот макет смысл? - В системе происходит некоторое количество управляемых фреймворками 302, особенно в отношении WRT. авторизация пользователя. При подключении напрямую к WEBrick или Thin все работает как положено. При подключении через Cherokee по какой-то причине номер порта туннеля удаляется из
Location:
заголовок ответа. Есть идеи, почему это происходит? - Всякий раз, когда cherokee был перезапущен, первый запрос к приложению rails выдает ошибку HTTP "502 bad gateway", предположительно потому, что тонкий сервер запускается по требованию. Любой способ избавиться от этого начального 502?
1 ответ
На сегодняшний день лучший способ - это развернуть рельсы с Capistrano (Vlad) и Passenger с nginx / apache (nginx быстрее, apache более распространен). Я использую несколько сайтов с умеренным трафиком с такой настройкой, и она работает без сбоев.
Некоторые заметки:
- http://www.rubyenterpriseedition.com/ быстрее.
- Ruby 1.92 быстрее
- Если вы ограничены в памяти (VPS), используйте nginx
Что касается ваших вопросов:
1. Да, это возможно.
2. С помощью capistrano поместите текущее содержимое и отпустите каталоги (чтобы разрешить откат). Почему симлинк? Публичный принадлежит заявке.
3. Это ошибка чероки
4. Держите тонкий как отдельный процесс, под каким-то руководителем процесса.