¿Cuál es la mejor manera de almacenar específicos de la aplicación de configuración en rails?

StackOverflow https://stackoverflow.com/questions/110078

  •  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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top