2010-09-16 9 views
8

Actualmente, pongo las claves que uso para acceder a otras API y similares en el archivo environment.rb. De esta forma, está disponible tanto cuando ejecuto localmente como también en heroku.¿Cómo protejo mis claves privadas cuando uso github, heroku y me desarrollo localmente?

Sin embargo, me gustaría empezar a hacer que mi código esté disponible públicamente a través de github para que pueda obtener ayuda.

¿Cuáles son los pasos que debo hacer para que esto suceda, especialmente para poder realizar pruebas locales y probar heroku?

Parece que hay una forma en heroku de agregar las claves desde una línea de comandos, por lo que no necesitan residir en la aplicación ruby-on-rails. ¿Pero qué hay para el desarrollo local?

Respuesta

4

moverlos a un inicializador y añadir el archivo a .gitignore

EDIT:

hay un directorio llamado config en inicializadores. Aquí es donde coloca el código que se supone que debe ejecutarse una vez cuando se inicia su aplicación. En el pasado, environment.rb se usaba para estas configuraciones, pero los inicializadores mantienen las cosas mejor organizadas. Crearía un archivo en el directorio de inicializadores llamado "load_keys.rb" o algo así. En este archivo, colocaría el código exacto que estaba en su archivo environment.rb que no desea en github.

+0

hola, perdón, ¿qué quiere decir con mover a un iniciador? – Angela

+0

No hay problema, actualicé mi publicación original con más información sobre los inicializadores. Supongo que sabes qué es .gitignore ya que no preguntaste. –

+0

sí, gracias, estoy familiarizado con .gitignore :) Estoy familiarizado con el directorio, pero no estaba seguro de qué hacer con él ... – Angela

1
  1. Coloque sus llaves privadas en ~/.ssh como de costumbre.
  2. Encripte sus claves privadas con una frase de contraseña.
  3. Instalar keychain.
  4. Agregue eval $(keychain private-key-file1 private-key-file2 private-key-file3; source ~/.keychain/${HOSTNAME}-sh) a su ~/.bashrc, ~/.profile, ~/.bash_profile o lo que sea. (Vea la página de llavero para csh, tcsh, zsh, o lo que sea)
16

puede utilizar variables de entorno (config vars en heroku) para almacenar sus claves de la API y no comprobarlas en la fuente.

Para una project que yo estoy trabajando, yo uso un tenedor de twitter-auth, y lo cambió para leer el secreto del cliente y la clave a partir de variables env:

http://github.com/dpmcnevin/twitter-auth/blob/ace5d60a8ed8121cca4c97ef30a0cd025b99bfe1/lib/twitter_auth.rb#L68

OAuth::Consumer.new(
    ENV['oauth_consumer_key'] || config['oauth_consumer_key'],   
    ENV['oauth_consumer_secret'] || config['oauth_consumer_secret'], 
    options 
) 

luego configuro las llaves en mi .rvmrc en el directorio del proyecto para el uso local:

export oauth_consumer_key=xxxxxxxxxxxx 
export oauth_consumer_secret=xxxxxxxxxxxxxxxxxxx 
rvm [email protected]edactify 

Y finalmente establecieron la ENVI las variables ronment en heroku:

$ heroku config:add oauth_consumer_key=xxxxxxxxxxxxx 
$ heroku config:add oauth_consumer_secret=xxxxxxxxxxxxx 
$ heroku config 
DATABASE_URL   => postgres://..... 
RACK_ENV    => production 
oauth_consumer_key => xxxxxxxxxxxxxxxx 
oauth_consumer_secret => xxxxxxxxxxxxxxxxxxx 

A continuación, sólo asegúrese de que su .rvmrc está en el .gitignore y luego se puede empujar a github sin exponer ninguna clave de API.

+0

¿Alguien con acceso a push to your heroku puede leer las claves con configuración de heroku? ? – TLK

Cuestiones relacionadas