ruby on rails - rails - No se puede acceder a las variables de entorno dentro del archivo `database.yml`
ruby on rails figaro (2)
¡Solución rápida y corta si está ejecutando una nueva versión de Rails! Ejecute el siguiente comando:
spring stop
..then ejecutar la rails console
u otro comando de rieles. Mi problema era que el servidor de Spring debía reiniciarse para actualizar / recuperar mis nuevos ENV vars. Estaba iniciando la consola de Rails y no podía verlos hasta que apagué Spring.
Las versiones anteriores de Rails no tenían este problema ya que no usaban el servidor de Spring.
Otra herramienta para ayudarlo a solucionar problemas: use el siguiente comando para imprimir su configuración de database.yml. Puede ejecutarlo desde la línea de comandos, pero prefiero ejecutarlo dentro de la consola de Rails, ya que puede usar awesome_print para hacerlo bonito:
Dentro de la rails console
:
puts ActiveRecord::Base.configurations
... o usando awesome_print
ap ActiveRecord::Base.configurations
O en cambio desde la línea de comando:
bin/rails runner ''puts ActiveRecord::Base.configurations''
Tengo la siguiente sección de desarrollo de mi archivo development.yml
:
development:
adapter: postgresql
host: localhost
database: testtb
username: app_user
password: ENV[''APP_USER_POSTGRES_PASSWORD''] <= Troublesome line
Cuando abro una consola de rieles a través de la consola de bundle exec rails console
y ENV[''APP_USER_POSTGRES_PASSWORD'']
la contraseña de DB que he especificado en mi perfil local. Sin embargo, cuando inicio mi servidor de rieles, no se puede conectar al DB, fallando con
PGError FATAL: password authentication failed for user "app_user"
Esto funcionaba anteriormente cuando tenía la contraseña de DB escrita realmente en texto plano, en lugar de intentar acceder a ella a través de ENV[''...'']
, pero por razones obvias, quiero mantener la contraseña real fuera de este archivo por completo ( y, por lo tanto, fuera del repositorio de código) mientras se pueden comprometer otros cambios no seguros en el archivo database.yml
.
¿Hay algo especial sobre la sintaxis que me falta , o las variables de entorno por alguna razón no están disponibles cuando se carga el archivo database.yml
?
Actualización: Algunas personas informan en los comentarios que esto no funciona a partir de Rails 4.2.xx. No lo he probado yo mismo, por lo tanto, YMMV.
Ah, finalmente descubrió la solución simple: acepta Ruby incrustado:
password: <%= ENV[''APP_USER_POSTGRES_PASSWORD''] %>