ruby-on-rails - generate - ruby on rails database configuration
¿Cuál es la mejor manera de almacenar la configuración específica de la aplicación en los rieles? (6)
Necesito almacenar la configuración específica de la aplicación en los rieles. Pero tiene que ser:
- accesible en cualquier archivo (modelo, vista, ayudantes y controladores)
- entorno especificado (o no), eso significa que cada entorno puede sobrescribir las configuraciones especificadas en environment.rb
Intenté usar environment.rb y poner algo así como
USE_USER_APP = true
Eso funcionó para mí, pero cuando intento sobrescribirlo en un entorno específico, no funcionará porque production.rb, por ejemplo, parece estar dentro del bloque Rails: Initializer.run.
Entonces, ¿alguien?
Encontré un buen camino aquí
Estaba ayudando a un amigo a establecer la solución mencionada por Ricardo ayer. Lo pirateamos un poco cargando el archivo YAML con algo similar a esto (pasando de la memoria aquí):
require ''ostruct''
require ''yaml''
require ''erb''
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)
Esto le permitió incrustar el código de Ruby en la configuración, como en Rhtml:
development:
path_to_something: <%= RAILS_ROOT %>/config/something.yml
Lo más básico es establecer una variable de clase desde su entorno.rb. He hecho esto para Google Analytics. Básicamente, quiero una clave diferente según el entorno en el que me encuentre para que el desarrollo o la puesta en escena no desvíen las métricas.
Así es como lo hice.
En lib/analytics/google_analytics.rb
:
module Analytics
class GoogleAnalytics
@@account_id = nil
cattr_accessor :account_id
end
end
Y luego en environment.rb
o en environments/production.rb
o cualquiera de los otros archivos de entorno:
Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"
Luego, en cualquier lugar donde quiera hacer referencia, digamos el diseño predeterminado con el JavaScript de Google Analytics, simplemente llame a Analytics::GoogleAnalytics.account_id
.
Mira Configatron: http://github.com/markbates/configatron/tree/master
Todavía tengo que usarlo, pero él lo está desarrollando activamente ahora, y se ve bastante bien.
Usa variables de entorno Heroku usa esto. Recuerde que si mantiene la configuración en la base de código, cualquier persona con acceso al código tiene acceso a cualquier configuración secreta (claves api, claves api de puerta de enlace, etc.).
El entorno de daemontool es una buena herramienta para establecer la configuración. Estoy bastante seguro de que eso es lo que Heroku usa para aplicar las variables de entorno.
He utilizado los ajustes de Rails en caché .
Es muy simple de usar, mantiene sus valores de configuración en caché y le permite cambiarlos dinámicamente.