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.