2010-12-13 12 views
0

Ich bin gerade dabei, ein Rails-Projekt auf GitHub zu veröffentlichen, das ein Umbenennen und Konfigurieren einiger YML-Dateien oder das Festlegen von Umgebungsvariablen erfordert. Die Anwendung hat ein paar benutzerdefinierte Initialisierer und ich frage mich, was der beste Weg, um das Vorhandensein der oben genannten zu erzwingen ist? Derzeit bin ich mit dem folgenden Code-Schnipsel in einen meines initializers:Rails Initialiser Halte

# config/initializers/omniauth.rb 

config = YAML::load(File.read("#{Rails.root}/config/omniauh.yml"))[Rails.env] rescue {} 
config['twitter' ] ||= {} 
config['facebook'] ||= {} 

twitter_key  = config['twitter' ]['key']  || ENV['OMNIAUTH_TWITTER_KEY' ] 
twitter_secret = config['twitter' ]['secret'] || ENV['OMNIAUTH_TWITTER_SECRET' ] 
facebook_key = config['facebook']['key']  || ENV['OMNIAUTH_FACEBOOK_KEY' ] 
facebook_secret = config['facebook']['secret'] || ENV['OMNIAUTH_FACEBOOK_SECRET'] 

[twitter_key, twitter_secret, facebook_key, facebook_secret].each do |parameter| 
    throw "Rename and configure 'omniauth.yml.sample'." if parameter.nil? or parameter.empty? 
end 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :twitter , twitter_key , twitter_secret 
    provider :facebook, facebook_key, facebook_secret 
end 

Ist es gängige Praxis zu throw von initializers oder nicht Rails unterstützt einen besseren Weg, dies zu tun? Vielen Dank!

Antwort

1

Das ist in Ordnung. Sie können jedoch auch einen Anruf zu Rails.logger.fatal hinzufügen.

+0

'Rails.logger.fatal' scheint im Initialisierer nichts zu tun. Muss ich etwas spezielles konfigurieren, um das zu verwenden? –

+0

Nicht sicher. Protokolliert es irgendetwas in die Datei 'log/# {env} .log'? – yfeldblum

+0

Ich habe gerade festgestellt, dass es in den Protokollen schreibt, aber nicht den Start des Servers (oder Drucken auf die Ausgabe beim Ausführen von "Rails s") zu stoppen. –

1

Das vollkommen akzeptabel mir scheint, und ist, wie ich es gehen würde (außer ich raise statt throw verwenden würde; P)