Здравствуйте. Подскажите пожалуйста. А как правильно считать переменные файла .env?
Нагуглил gem dotenv Но он как бы только для development режима, а что тогда использовать в production?
Сервер под Windows.
Спасибо.
Файл .env не предназначен для production
: сисадмин должен вручную настроить переменные окружения либо при помощи команды setx в bat-файле.
Переменные окружения могут содержать чувствительные данные, которые нельзя знать разработчикам и также адреса серверов.
Самое простое - это когда используется облачная PaaS платформа Heroku.
Там при деплое используется команда
heroku config:set param1=value1 param2=value2 ... -a APP_NAME
На обычном Linux сервере - зависит от того какой веб-сервер:
nginx - в файле /etc/default/nginx (Debian)
Apache - в файле /etc/apache2/envvars (Debian)
Роман Мирр, Спасибо за ответ, но как бы есть один маленький нюанс, к примеру если на сервере крутиться несколько баз, или даже несколько серверов БД и несколько проектов, где каждый к своей базе, то тут как бы непонятно как разрулить такую ситуацию через переменные окружения:
PGDATABASE=..
PGHOST=..
PGPORT=..
Тут все-таки логичней делать .env файл для каждого проекта, или прописывать это все в скрипте запуска.
Любопытно. Тот же контент файла, что и для development?
Поделитесь опытом разврёртывания приложения на Windows с файлами .env. Какую должность занимает тот, который развёртывает приложения RoR? Как у вас налажен процесс синхронизации продакшн среды с предварительными средами? Используется ли виртуализация? Если да, то какая?
C Windows никогда не работали, в этом просто нет никакого смысла. Даже девелоперу проще vagrant под виндой запустить, чем пытаться разобраться у него все просто не работает, или не работает именно из-за Windows
.env в гитигноре, соответсвенно для девелопмента и продакшена разный.
в гите .evn.example для других разработчиков и по необъодимости описание каждой переменной в readme.md
Тулза для деплоя - mina или capistrano каждый раз подтягивает актуальный .env для продакшен приложения из shared файла.
Что касается деплоя, то он от проекта к проекту разный. Heroku, AWS Beanstaslk, Docker, просто приложение на DigitalOcean или AWS ec2, Rancher или Deis. И получается, что ENV переменные универсальный вариант конфигурирования, который работает везде.
Какую должность занимает тот, который развёртывает приложения RoR?
Как правило, если приложенько простое - Rails + Postgres + Redis + Cron - его настраивают сами разработчики, если сложнее или требуется несколько серверов - инженер из команды DevOps. И там уже он решает нужны ли ему те или иные инструменты вроде terraform, ansible и других или нет.
По факту он отдает в команду разработчиков скрипт или команду для деплоя приложения.
Как у вас налажен процесс синхронизации продакшн среды с предварительными средами?
Такое практикуем не так часто, обычно 2 варианта.
1. Раз в какое-то время синхронизируем базу, при этом обфусцировав данные пользователей
2. Образ докера билдится только для стейджа, на прод заливается тот, который работает на стейдже.
Вся суть выноса данных в ENV в том, чтобы не прописывать секреты в исходном коде, а подставлять их в зависимости от ситуации.
То есть в девелопменте мы подставляем одно, а в продакшене - другое.