¿Cuál es la mejor manera de almacenar específicos de la aplicación de configuración en rails?
-
02-07-2019 - |
Pregunta
Necesito almacenar específicos de la aplicación de configuración en rails.Pero tiene que ser:
- accesible en cualquier archivo (modelo, vista, los ayudantes y los controladores
- medio ambiente especificado (o no), eso significa que cada entorno puede sobrescribir las configuraciones especificadas en el medio ambiente.rb
He tratado de utilizar el ambiente.rb y poner algo como
USE_USER_APP = true
que han trabajado para mí, pero al intentar sobrescribir en un entorno específico y no lo puedo trabajar porque la producción.rb, por ejemplo, parece estar dentro de los Rieles:Inicializador.ejecutar el bloque.
Así, cualquier persona?
Solución
Yo estaba ayudando a un amigo a configurar la solución mencionado por Ricardo el día de ayer.Cortamos un poco por la carga de los archivos YAML con algo similar a esto (que va 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 código Ruby en la configuración, como en Rhtml:
development:
path_to_something: <%= RAILS_ROOT %>/config/something.yml
Otros consejos
Mira Configatron: http://github.com/markbates/configatron/tree/master
Todavía tengo que usarlo, pero él está trabajando activamente en el desarrollo, y se ve muy bonito.
Lo más básico es establecer una variable de clase de su entorno.rb.He hecho esto para Google Analytics.Básicamente quiero una clave diferente dependiendo del entorno que estoy en el desarrollo o puesta en escena no sesgar las métricas.
Esta es la forma en que lo hice.
En lib/analytics/google_analytics.rb
:
module Analytics
class GoogleAnalytics
@@account_id = nil
cattr_accessor :account_id
end
end
Y, a continuación, en environment.rb
o en environments/production.rb
o cualquiera de los otros archivos del entorno:
Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"
A continuación, en cualquier lugar que ned para referencia, decir que el diseño predeterminado con el JavaScript de Google Analytics, que usted acaba de llamar Analytics::GoogleAnalytics.account_id
.
He encontrado una buena manera aquí
Uso de variables de entorno.Heroku los utiliza.Recuerde que si usted guarda la configuración en la base de código, cualquier persona con acceso al código tiene acceso a los secretos de configuración (aws, api de llaves, la puerta de enlace api de llaves, etc).
daemontool del envdir es una buena herramienta para la configuración del ajuste, estoy bastante seguro de que es lo que Heroku utiliza para dar aplicación a sus variables de entorno.
He utilizado Rieles De Configuración De La Caché.
Es muy simple de usar, mantiene sus valores de configuración de caché y le permite cambiar de forma dinámica.