ruby-on-rails - secrets - rails secret_key_base
Producción de rieles-¿Cómo configurar la base de clave secreta? (4)
Como puede ver, hay un valor codificado para los entornos de development
y test
, pero el de production
proviene de una variable. Antes que nada, ¿por qué de esta manera? Es una característica de seguridad. De esta forma, si comprueba este archivo en el control de la versión como git o svn, los valores de development
y test
se comparten, lo cual está bien, pero el de production
(el que se usaría en un sitio web real) no lo es, por lo que nadie puede mirar la fuente para obtener ese secreto.
En cuanto a la variable utilizada, ENV["SECRET_KEY_BASE"]
, esta es una variable de entorno del entorno en el que se ejecuta Rails (que no debe confundirse con el "entorno" de Rails, como development
, test
y production
). Estas variables de entorno provienen del shell. Como se mencionó en la publicación de JensD , puede establecer temporalmente esta variable de entorno con:
export SECRET_TOKEN=YOUR SECRET TOKEN
export SECRET_KEY_TOKEN=YOUR SECRET BASE
Para generar un nuevo token secreto, use el comando rake secret
en la línea de comando.
Eso es temporal, sin embargo, y no es una buena solución final. Para obtener una solución final, consulte este artículo que tiene un poco rápido cerca del final al implementar dotenv para cargar los secretos de configuración. Recuerde, si usa el control de versiones, asegúrese de excluir su archivo .env
su .env
.
Configurar dotenv requiere un poco de trabajo, pero lo recomiendo sobre intentar configurar manualmente estas variables de entorno.
Así que estoy tratando de que mi aplicación Rails se despliegue en modo de producción, pero me sale el error: faltando secret_token
y secret_key_base
para el secret_key_base
de ''producción'', establezca estos valores en config/secrets.yml
Mi archivo secrets.yml es el esperado:
development:
secret_key_base: xxxxxxx
test:
secret_key_base: xxxxxxx
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Pero incluso después de google e investigación, no tengo idea de qué hacer con la base de clave secreta de producción. La mayor parte de la información supone que tengo cierto conocimiento previo, pero la realidad es que soy un novato.
¿Alguien puede explicarme cómo configurar mi clave secreta y hacer que funcione en modo de producción?
Esta respuesta me ayudó mucho. Él le indica cómo configurar el archivo secrets.yml en producción y cómo leerlo desde el entorno:
enlace original: https://.com/a/26172408/4962760
Tuve el mismo problema y lo resolví creando una variable de entorno para cargar cada vez que me conecté al servidor de producción y realicé una mini guía de los pasos para configurarlo:
https://gist.github.com/pablosalgadom/4d75f30517edc6230a67
Estaba usando Rails 4.1 con Unicorn v4.8.2, cuando traté de implementar mi aplicación no se inició correctamente y en el archivo unicorn.log encontré este mensaje de error:
"error de la aplicación: falta la base de clave secreta para el entorno de ''producción'', establezca este valor en config / secrets.yml (RuntimeError)"
Después de algunas investigaciones descubrí que Rails 4.1 cambió la forma de administrar la clave secreta, por lo que si lee el archivo secrets.yml ubicado en [exampleRailsProject] /config/secrets.yml encontrará algo como esto:
No guarde los secretos de producción en el repositorio,
en su lugar, lea los valores del entorno. producción: secret_key_base: <% = ENV ["SECRET_KEY_BASE"]%> Esto significa que los rieles
le recomienda utilizar una variable de entorno para la base de clave_secreta en su servidor de producción, para resolver este error debe seguir estos pasos para crear una variable de entorno para Linux (en mi caso Ubuntu) en su servidor de producción:
1.- En el terminal de tu servidor de producción ejecuta el siguiente comando:
$ RAILS_ENV = production rake secret Esto devuelve una cadena grande con letras y números, copia eso (nos referiremos a ese código como GENERATED_CODE).
2.1- Ingrese como usuario root a su servidor, encuentre este archivo y edítelo: $ vi / etc / profile
Vaya a la parte inferior del archivo ("MAYÚS + G" para la capital G en VI)
Escriba su variable de entorno con GENERATED_CODE (Presione la tecla "i" para escribir en VI), asegúrese de estar en una nueva línea al final del archivo:
export SECRET_KEY_BASE = GENERATED_CODE Guarde los cambios y cierre el archivo (presionamos la tecla "ESC" y luego escribimos ": x" y "ENTER" para guardar y salir en VI)
2.2 Pero si inicia sesión como usuario normal, vamos a llamarlo example_user para este aspecto, necesitará encontrar uno de estos otros archivos:
$ vi ~ / .bash_profile $ vi ~ / .bash_login $ vi ~ / .profile Estos archivos están en orden de importancia, lo que significa que si tiene el primer archivo, entonces no necesitaría escribir en los demás. Entonces, si encuentras estos 2 archivos en tu directorio "~ / .bash_profile" y "~ / .profile", solo tendrás que escribir en el primero "~ / .bash_profile", porque Linux solo leerá este y el otro será ignorado
Luego, vamos al final del archivo ("SHIFT + G" para la capital G en VI)
Y escribiremos nuestra variable de entorno con nuestro GENERATED_CODE (Presione la tecla "i" para escribir en VI), asegúrese de estar en una nueva línea al final del archivo:
export SECRET_KEY_BASE = GENERATED_CODE Después de haber escrito el código, guarde los cambios y cierre el archivo (presionamos la tecla "ESC" y luego escribimos ": x" y "ENTER" para guardar y salir en VI)
3.- Puedes verificar que nuestra variable de entorno esté configurada correctamente en Linux con este comando:
$ printenv | grep SECRET_KEY_BASE o con:
$ echo $ SECRET_KEY_BASE Cuando ejecuta este comando, si todo fue bien, le mostrará el GENERATED_CODE desde antes. Finalmente, con toda la configuración, deberías poder implementar sin problemas tu aplicación Rails con Unicorn u otro.
Cuando cierre su terminal de shell y vuelva a iniciar sesión en el servidor de producción, tendrá esta variable de entorno configurada y lista para usar.
¡¡Y eso es!! Espero que esta mini guía te ayude a resolver este error.
Descargo de responsabilidad: no soy un gurú de Linux o Rails, por lo que si encuentra algo incorrecto o algún error, me complacerá solucionarlo.
Los errores que está recibiendo solo indican que la variable de entorno para secret_key_base
no está configurada correctamente en el servidor.
Puede usar varios scripts como capistrano que automatizan el proceso de configuración antes de ejecutar la aplicación.
En cuanto a una solución rápida, prueba esto:
export SECRET_KEY_BASE=YOUR SECRET BASE
Valide las variables de entorno y verifique si se han configurado.
Mando:
env | grep -E "SECRET_TOKEN|SECRET_KEY_BASE"
Si aparecen sus valores, estos se configuran en el servidor de producción.
También es una buena práctica usar ENV.fetch(SECRET_KEY)
ya que esto generará una excepción antes de que la aplicación siquiera intente iniciarse.
Puede generar la clave usando los siguientes comandos
$ irb
>> require ''securerandom''
=> true
>> SecureRandom.hex(64)
=> "3fe397575565365108556c3e5549f139e8078a8ec8fd2675a83de96289b30550a266ac04488d7086322efbe573738e7b3ae005b2e3d9afd718aa337fa5e329cf"
>> exit