Назад | Перейти на главную страницу

Развертывание небольшого приложения 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-запроса содержит номер порта туннеля.

Чтобы, надеюсь, превратить эти бессвязные разговоры в уместную публикацию, вот несколько вопросов:

  1. При использовании тонкого рубинового сервера за другим httpd "внешним интерфейсом" может ли один экземпляр обрабатывать (без очереди) несколько параллельных запросов rails, или он может делать это только тогда, когда он используется в качестве внешнего интерфейса? Должен ли я использовать их пул на разных портах?
  2. В настоящее время мы помещаем приложение rails в / var / rails /Название приложенияи символическая ссылка / var / rails /Название приложения/ общедоступный в / var / www /Название приложения, и владеть всем www-data. Имеет ли смысл этот макет?
  3. В системе происходят некоторые регулируемые фреймворком 302 редиректы, особенно в отношении. авторизация пользователя. При прямом подключении к WEBrick или Thin все работает должным образом. При подключении через Cherokee по какой-то причине номер порта туннеля вырезается из Location: заголовок ответа. Есть идеи, почему это происходит?
  4. После перезапуска Cherokee первый запрос к приложению rails выдает ошибку HTTP «502 bad gateway», предположительно из-за того, что тонкий сервер запускается по запросу. Есть ли способ избавиться от этого начального 502?

Сегодня лучший способ - развернуть рельсы с Capistrano (Влад) и Пассажир с nginx / apache (nginx быстрее, apache чаще). Я использую несколько сайтов с умеренным трафиком с такой настройкой, и он работает без сбоев.
Некоторые примечания:
- Корпоративная версия Ruby быстрее.
- Ruby 1.92 быстрее
- Если у вас ограниченная память (VPS), используйте nginx

Что касается ваших вопросов:
1. Да, может.
2. С помощью capistrano поместите файлы в каталоги текущего и выпуска (чтобы разрешить откат). Почему символическая ссылка? Public принадлежит приложению.
3. То есть Ошибка чероки
4. Сохраняйте тонкость как отдельный процесс под руководством какого-либо руководителя процесса.