2010-08-21 23 views
5

Tengo una aplicación de rieles y, desde la sección de administración del sitio, me gustaría poder habilitar/deshabilitar ciertas configuraciones, como la publicación de anuncios o la incrustación del código de seguimiento de Google Analytics.¿Dónde debo almacenar la configuración de configuración de todo el sitio para una aplicación de Rails?

¿Existe una mejor práctica para esto en Rails? Un pensamiento fue crear una tabla de configuraciones y almacenar valores en ella.

+0

¿Cómo va a representar el HTML? – s84

+1

Parece que está editando configuraciones de tiempo de ejecución, que probablemente pertenecen a una tabla de base de datos. – meagar

+0

Sam, estaba pensando que el HTML se representaría en el archivo de diseño de la aplicación probablemente usando un método de ayuda personalizado. – Moe

Respuesta

0

Puede almacenar su configuración en el directorio config/. Conozco algunas aplicaciones que almacenan sus configuraciones en ese directorio. (por ejemplo, teambox.yml en Teambox).

1

Guardaría esta información en una base de datos a menos que no tenga acceso a una. Si no tiene acceso a una base de datos, puede almacenar el archivo en la carpeta config.

Aquí hay un código de controlador de ejemplo para leer y escribir en un archivo de configuración.

def featured_specials 
    @featured_specials = YAML::load_file("#{RAILS_ROOT}/config/featured_specials.yml") 
end 

def save_featured_specials 
    config_file = "#{RAILS_ROOT}/config/featured_specials.yml" 
    File.new(config_file, "w") unless File.exist?(config_file) 
    File.open(config_file, "w") do |f| 
    f.write(params['formvars'].to_yaml) 
    end 
    flash[:notice] = 'Featured Specials have been saved.' 
    redirect_to :action => 'featured_specials' 
end 

NOTA: este código podría limpiarse bastante, pero debería servir como un buen ejemplo.

3

Si no vas para la configuración de tiempo de ejecución, entonces es posible usar algo como generador ingenioso-config RBates': http://github.com/ryanb/nifty-generators

Lo he utilizado para los ajustes de configuración sencilla, en tiempo construir. Así, por ejemplo, al almacenar las credenciales de pasarela de pago para un sitio de comercio electrónico, mi load_gateway_config.yml se ve así:

require 'ostruct' 

raw_config = File.read(Rails.root + "config/gateway_config.yml") 
GATEWAY_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys 

#allow dot notation access 
GatewayConfig = OpenStruct.new(GATEWAY_CONFIG) 

Entonces, para agarrar un ajuste en su archivo de configuración, se le llama algo así como

GatewayConfig.username 

Otra opción es configuration gem que le da un uso de notación de punto similar, pero también opciones más avanzadas como establecer valores predeterminados, y el archivo de configuración es Ruby en lugar de YAML.

0

Ya he votado una respuesta diferente, pero de una manera rápida y sucia puede soltar una variable de clase en environment.rb, después del bloque del código de inicialización.

Cuestiones relacionadas