Luis Mayoral
por Luis Mayoral
1 minuto(s) de lectura

Categorías

Etiquetas

Hasta ahora un patrón bastante común en aplicaciones Rails que necesitan de un fichero de configuración era encontrarse en el config/application.rb algo parecido a esto:

require "ostruct"
config_file = File.join("config/myapp.yml")
config = YAML.load(File.read(config_file))[Rails.env]
AppConfig = OpenStruct.new(config)

De esa manera podíamos usar el objeto AppConfig en toda la aplicación y así llevar a nuestros controladores o modelos algunas variables de configuración que debían cambiar dependiendo del entorno (host y puerto para Redis, número de segundos de delay que indicar a un worker Sidekiq en el perform_in, app id y secret de una API externa, etc).

Suele pasar en la comunidad Rails que conforme un patrón de este tipo empieza a ser muy usado acabe siendo adaptado e incorporado al propio framework. En este caso, en la versión 4.2 nos llega en la forma de config_for.

Supongamos que tenemos un fichero llamado config/redis.yml con el siguiente contenido:

development:
  host: localhost
  port: 6379
test:
  host: localhost
  port: 6379
production:
  host: my-production-redis-server
  port: 6379

Ahora podemos hacer la siguiente llamada en la aplicación:

> Rails.application.config_for(:redis)
=> {"host" => "localhost", "port" => 6379}

El valor del hash en este ejemplo dependería del entorno en el que nos encontrásemos.

Podéis encontrar más información acerca de config_for en el propio pull request en el que se incorporó a Rails.