2008-09-21 17 views
6

Necesito almacenar la configuración específica de la aplicación en los rieles. Pero tiene que ser:¿Cuál es la mejor manera de almacenar la configuración específica de la aplicación en los rieles?

  • puede llegar 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

he tratado de utilizar environment.rb y poner algo como

USE_USER_APP = true 

que funcionó para mí, pero cuando se trata de sobrescribir en un entorno específico no lo puedo trabajar bec ause production.rb, por ejemplo, parece estar dentro del bloque Rails: Initializer.run.

Entonces, ¿alguien?

Respuesta

4

Estaba ayudando a un amigo a configurar the solution mentioned by Ricardo ayer. Nos hackeamos un poco cargando el archivo YAML con algo similar a esto (al pasar 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 
0

He encontrado una buena manera here

4

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" 

A continuación, en cualquier lugar que ned de referencia, dicen que el diseño predeterminado con el Google JavaScript de Analytics, simplemente llame al Analytics::GoogleAnalytics.account_id.

0

Usar 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.).

envdir 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.

0

He usado Rails Settings Cached.

Es muy simple de usar, mantiene sus valores de configuración en caché y le permite cambiarlos dinámicamente.

+0

Sí, creo que esta joya es útil para almacenar configuraciones simples. – Jiemurat

Cuestiones relacionadas