2010-08-21 9 views
5

Ho un'app per i binari e dalla sezione di amministrazione del sito mi piacerebbe poter abilitare/disabilitare determinate impostazioni come la pubblicazione di annunci o l'incorporamento del codice di monitoraggio di Google Analytics.Dove devo archiviare un'impostazione di configurazione del sito in tutto il sito per un'app Rails?

Esiste una best practice per questo in Rails? Un pensiero stava creando una tabella delle impostazioni e memorizzando i valori al suo interno.

+0

Come verrà eseguito il rendering dell'HTML? – s84

+1

Sembra che tu stia modificando le impostazioni di runtime, che probabilmente appartengono a una tabella di database. – meagar

+0

Sam, stavo pensando che l'HTML sarebbe stato reso nel file di layout dell'applicazione probabilmente usando un metodo di supporto personalizzato. – Moe

risposta

0

È possibile memorizzare la configurazione nella directory config/. Conosco alcune applicazioni che memorizzano le loro configurazioni in quella directory. (ad esempio teambox.yml in Teambox).

1

Vorrei memorizzare queste informazioni in un database a meno che tu non ne abbia accesso. Se non si ha accesso a un database, è possibile memorizzare il file nella cartella config.

Ecco un esempio di codice del controller per la lettura e la scrittura in un file di configurazione.

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: questo codice potrebbe essere pulito un po ', ma dovrebbe servire come esempio decente.

3

Se non stai andando per la configurazione di run-time, allora si potrebbe usare qualcosa come generatore di nifty-config rbates': http://github.com/ryanb/nifty-generators

ho usato per le impostazioni di configurazione semplice, costruire in tempo. Così, per esempio, quando la memorizzazione delle credenziali di gateway di pagamento per un sito di e-commerce, il mio load_gateway_config.yml assomiglia a questo:

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) 

Poi, per afferrare l'impostazione dal file di configurazione, si chiama qualcosa come

GatewayConfig.username 

Un'altra opzione è la configuration gem che offre un uso di notazione di punti simile, ma anche opzioni più avanzate come l'impostazione di valori predefiniti e il file di configurazione è Ruby invece di YAML.

0

ho già upvoted una risposta diversa, ma di un modo rapido-and-dirty si può cadere una variabile di classe in environment.rb, dopo il blocco di codice di inizializzazione.

Problemi correlati