7

Tengo muchas credenciales que debo manejar para conectar mi aplicación a Amazon s3 y otros servicios.¿Cómo puedo definir variables de entorno localmente y no cambiar sus definiciones/presionarlas a heroku?

Tengo mi aplicación heroku en funcionamiento con s3, y funciona muy bien. Definí mis credenciales de acceso s3 siguiendo este ejemplo: http://devcenter.heroku.com/articles/config-vars

Sin embargo, ahora quiero poder tener acceso a s3 desde mi entorno de desarrollo local. Obviamente, los config vars que definí en heroku no están disponibles en mi localhost. ¿Cómo puedo definir estas claves localmente? Además, busco en particular una solución que sea segura (por ejemplo, si defino mis claves en texto plano en un inicializador o algo así, no quiero que ese archivo se inserte en heroku).

Para el fondo, esto es lo agrego a mi modelo para obtener un clip corriendo con s3

has_attached_file :photo, 
:storage => :s3, 
:bucket => 'bucket_name', 
:s3_credentials => { 
    :access_key_id => ENV['S3_KEY'], 
    :secret_access_key => ENV['S3_SECRET'] 
} 

Respuesta

9

El mejor lugar para definir este tipo de cosas, si no quiere que se comparte, es probablemente un inicializador .

# config/initializers/s3_constants.rb 


if Rails.env.development? 
    S3_KEY = "mys3key" 
    S3_SECRET = "mys3secret" 
end 

Asegúrese de que este archivo se añade a .gitignore por lo que no será empujado junto con el resto de su repositorio.

Hablando de forma realista, las constantes que difieren en cada entorno deberían ubicarse realmente en el archivo para ese entorno (digamos desarrollo.rb aquí) ... pero esos archivos también deberían agregarse realmente a su sistema de control de versiones, y si definitivamente, definitivamente quieres que estos datos sean excluidos de git, entonces un archivo separado que no comprometes es probablemente tu mejor opción.

+0

esto definitivamente la mejor manera de hacer esto. Sin embargo, preferiría probar que el env no es 'producción'. Por lo tanto, funciona en su prueba también. –

+0

Si está ignorando el archivo git, ¿cómo sabrá el servidor de producción las variables env? ¿Los archivos ignorados aún se pasan al servidor? – kibaekr

2

Simplemente defina las variables de entorno en su archivo .bash_profile como cualquier otra variable de entorno. Tal vez dejen un comentario para demarcar la sección como variables de entorno específicas de Rails.

#~/.bash_profile 
# Rails constants 
S3_KEY="blady" 
S3_SECRET="bladybloo123" 

Además, tal vez desee cambiar el nombre a algo más específico para que pueda tener más de una conexión s3 define ...

-2

heroku proporciona config heroku: añadir y le proporcionará CLAVE = valor . ver la documentación de config vars

Cuestiones relacionadas