rails google ruby-on-rails ruby-on-rails-3 environment-variables omniauth railscasts

ruby-on-rails - rails devise google



Establecer variables de entorno en Rails 3(Devise+Omniauth) (3)

He estado tratando de descubrir cómo Ryan Bates, en su screencast de Autenticación de Facebook , está configurando las siguientes variables de entorno "FACEBOOK_APP_ID" y "FACEBOOK_SECRET".

provider :facebook, ENV[''FACEBOOK_APP_ID''], ENV[''FACEBOOK_SECRET'']

Hay preguntas similares, pero no hay respuestas que haya podido obtener para trabajar en Rails 3.2.1.

ACTUALIZAR:

A partir de mayo de 2013, mi forma preferida de manejar las variables ENV es a través de la gema Figaro


Aquí hay otra idea. Defina las claves y valores en el archivo provider.yml , como se sugirió anteriormente. Luego, ponga esto en su environment.rb (antes de la llamada a Application.initialize! ):

YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }

Entonces, estas variables de entorno se pueden referenciar en el inicializador omniauth sin ninguna dependencia de ordenamiento entre inicializadores.


Hay varias opciones:

  • Establezca las variables de entorno desde la línea de comando:

    export FACEBOOK_APP_ID=your_app_id export FACEBOOK_SECRET=your_secret

    Puedes poner las líneas anteriores en tu ~/.bashrc

  • Establezca las variables de entorno cuando se ejecutan los rails s :

    FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret rails s

  • Crea un archivo .env con:

    FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret

    y usa Foreman (iniciando tu aplicación con el foreman start ) o la gema dotenv .


Puedes echar un vistazo a los comentarios :

Puede establecer variables de entorno directamente en el shell donde está iniciando su servidor:

FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails server

O (más bien hacky), podría configurarlos en su config/environments/development.rb :

ENV[''FACEBOOK_APP_ID''] = "12345"; ENV[''FACEBOOK_SECRET''] = "abcdef";

Una forma alternativa

Sin embargo, yo no haría ninguna de las dos cosas. Yo crearía un archivo de configuración (digamos config/facebook.yml ) que contiene los valores correspondientes para cada entorno. Y luego cargue esto como una constante en un inicializador:

config/facebook.yml

development: app_id: 12345 secret: abcdef test: app_id: 12345 secret: abcdef production: app_id: 23456 secret: bcdefg

config/initializers/facebook.rb

FACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env]

Luego reemplace ENV[''FACEBOOK_APP_ID''] en su código por FACEBOOK_CONFIG[''app_id''] y ENV[''FACEBOOK_SECRET''] por FACEBOOK_CONFIG[''secret''] .