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'']
.