Код, написанный на паре, можно скачать по ссылке.

Решим задачу по развёртыванию Ruby-приложения с проксированием через Nginx

Нам потребуется:

  • каталог с приложением, которое мы хотим развернуть
  • каталог с кофигурацией, которую мы хотим применить:
    • конфигурационные файлы для приложений, которые будем настраивать
    • скрипт, который будет использовать всё выше обозначенное для достижения цели

Какие шаги надо выполнить для установки

  • Установить ruby-интерпретатор для скрипта по установке всего и вся
  • Установить ruby-интерпретатор и поставить все необходимые зависимости

Интерпретатор для скрипта

  • Воспользоваться системным интепретатором.
  • Воспользоваться интепретатором приложения

Будем использовать первый вариант, т.к. он сложнее и интереснее.

Зависимости для автоматической установки

  • Ruby для запуска скрипта
  • Wget для получения ruby-install, chruby
  • tar для разархивации
  • sudo для повышения привилегий
  • make для выполнения установки

Как запускать внешние приложения из Ruby-скрипта

  • Использовать обратные кавычки `Команда`
  • Использовать %x[Команда]

В этих случаях для выполнения команды сначала запустится интерпретатор Bash, а потом он уже выполнит данную строку.

Данный подход таит в себе опасность: при неправильном использовании вы можете потерять контроль над выполнение скрипта. В частности, если команда у нас не задана жёстко, а строится из пользовательского ввода.

ls #{data}

Если пользователь в data ввёл ; rm -rf ~, то это будет валидной командой на Bash, только все пользовательские данные будут уничтожены.

  • Использование метода Kernel.system()
  • Использование метода Kernel.spawn()
  • Использование методов библиотеки open3.

Рекомендации по использованию этих методов:

  • Если вам нужно запустить программу, но НЕ НАДО обрабатывать её вывод. Тогда используем Kernel.system()
  • Если нужно обработать вывод, тогда используем Open3.capture2e
  • Если нужно и обработать вывод и показать его, тогда Open3.popen2