Перешёл с Laravel: ...
 
Уведомления
Очистить всё

Перешёл с Laravel: где в Rails хранить секреты, если .env больше нет?

4 Сообщения
4 Пользователи
2 Реакции
528 Просмотры
Валерий40
Сообщения: 33
Автор темы
Читает чужие PR фулстек-разработчик
Присоединился: 4 года назад
[#9]

Восемь лет на Laravel, месяц на Rails. Там всё жило в .env: на сервере свой файл, в репозитории .env.example. Здесь вижу credentials.yml.enc и master.key и не понимаю, как это живёт на проде и в команде. И коллега уже успел закоммитить master.key в ветку, пока я разбирался. Rails 7.0.


3 ответа
armen_pet
Сообщения: 30
Собрал свой gem DevOps-инженер
Присоединился: 4 года назад

Начну с ветки. Раз master.key попал в историю, считайте его скомпрометированным: удалить коммит мало, ветку могли уже склонировать. Пересоздайте ключ: расшифруйте старый файл, сохраните содержимое, удалите credentials.yml.enc и master.key, запустите bin/rails credentials:edit, он создаст новую пару, и вставьте содержимое обратно. Все секреты, которые были внутри, тоже поменяйте. Дальше схема такая: зашифрованный файл лежит в репозитории, ключ на сервер приходит переменной RAILS_MASTER_KEY, у разработчиков он лежит локально, в .gitignore он уже есть по умолчанию. Для окружений можно отдельные файлы:

bin/rails credentials:edit --environment production
# создаст config/credentials/production.yml.enc и production.key

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


Ответ
kostya.sokurov
Сообщения: 73
Держит прод бэкенд-разработчик, senior
Присоединился: 4 года назад

В коде потом Rails.application.credentials.dig(:payments, :api_key). Ключи, без которых приложение не должно работать, читайте в инициалайзере через fetch: тогда оно упадёт при старте, а не на первом платеже. И .env никто не запрещает, dotenv-rails живёт отлично, если команде так привычнее.


Ответ
vova64
Сообщения: 23
Собрал свой gem фрилансер
Присоединился: 4 года назад

У клиентов на старых проектах dotenv до сих пор сплошь и рядом, на 4.2 credentials ещё не было. Так что пригодится знать оба варианта


Ответ