Also... Zuerst sollte ich mein Ziel klar machen. Mein Ziel ist es, eine Umgebung definiert Konstante mit Attributen aus einer Yaml-Datei, die meine app verweisen kann gefüllt haben.
Das einfachste Beispiel, das ich geben kann, ist folgendes:
# initalizers/config.rb
CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[RAILS_ENV]
# config.yml:
production:
host:
foo.com
development:
host:
localhost
port:
3000
# config/environments/development.rb
Foo::Application.configure do
#...
config.action_mailer.default_url_options = { :host => CONFIG[:host], :port => CONFIG[:port] }
config.after_initialize do
Rails.application.routes.default_url_options = { :host => CONFIG[:host], :port => CONFIG[:port] }
end
end
Meine Probleme sind:
Die Konstante "CONFIG" existiert nicht vor dem after_initialize-Block (offensichtlich, weil CONFIG als Teil des Initialisierungsprozesses festgelegt wird), also muss ich dies in den after_initialize-Block verschieben, aber ich kann nicht auf "config.action_mailer" innerhalb des after_initialize-Blocks verweisen, weil "config" nicht in diesem Bereich existiert... Das ist wirklich verwirrend für mich. Sollte "config" nicht innerhalb des Blocks zugänglich sein, da es außerhalb des Blocks existiert?
Und als eine Nebenfrage, ich bin wirklich wirklich wirklich verwirrt, wie diese config.x Geschäft funktioniert. Der Block liefert keine Variablen, also wie ist "config" überhaupt gültig im Kontext von Foo::Application.configure?
Ich denke, damit es überhaupt funktioniert, sollte es so sein:
Foo::Application.configure do |config|
Aber das ist nicht der Fall, also bin ich wirklich neugierig, wie das funktioniert