Ruby как инструмент настройки
Код, написанный на паре, можно скачать по ссылке.
Решим задачу по развёртыванию 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