Frage

Ich brauche app spezifische Konfiguration in Schienen zu speichern. Aber es muss sein:

  • erreichbar in einer beliebigen Datei (Model, View, Helfer und Controller
  • Umgebung angegeben (oder nicht), dass jede Umgebung bedeutet, können die configs in environment.rb
  • angegebenen überschreiben

Ich habe versucht, environment.rb zu verwenden und setzen so etwas wie

USE_USER_APP = true

, die ich gearbeitet, aber bei dem Versuch, es in einer bestimmten Umgebung zu überschreiben, es wird nicht funktionieren, weil production.rb, zum Beispiel, scheint in der Rails zu sein. Initializer.run Block

So, anyone?

War es hilfreich?

Lösung

Ich half ein Freund einrichten die Lösung von Ricardo gestern erwähnt. Wir gehackt es ein bisschen durch die Datei mit etwas YAML Laden ähnlich wie diese (aus dem Gedächtnis gehen hier):

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)

Dies erlaubt ihm Ruby-Code in der Config, wie in RHTML einbetten:

development:
  path_to_something: <%= RAILS_ROOT %>/config/something.yml

Andere Tipps

Schauen Sie sich Configatron: http://github.com/markbates/configatron/tree/master

Ich habe noch, es zu benutzen, aber er aktiv nun die Entwicklung und sieht ganz nett.

Das einfachste, was zu tun ist, eine Klasse Variable von Ihrem environment.rb einzustellen. Ich habe dies für Google Analytics getan. Im Grunde möchte ich einen anderen Schlüssel je nachdem, welche Umwelt Ich bin in so die Entwicklung oder die Inszenierung nicht die Metriken Skew.

Dies ist, wie ich es tat.

In lib/analytics/google_analytics.rb:

module Analytics
  class GoogleAnalytics
    @@account_id = nil

    cattr_accessor :account_id
  end
end

Und dann in environment.rb oder in environments/production.rb oder eine der anderen Umgebungsdateien:

Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"

Dann überall Sie Referenz definiert, sagt das Standard-Layout mit dem Google Analytics JavaScript, um es einfach Analytics::GoogleAnalytics.account_id nennen.

fand ich eine gute Möglichkeit, hier

Verwenden von Umgebungsvariablen. Heroku verwendet diese. Denken Sie daran, dass, wenn Sie die Konfiguration in der Codebasis zu halten, kann jeder mit Zugriff auf den Code Zugang zu geheimer Konfiguration hat (aws api Schlüssel, Gateway api Schlüssel, etc).

daemontool der envdir ist eine gute Werkzeugkonfiguration für die Einstellung, ich bin ziemlich sicher, das ist, was Heroku verwendet Anwendung ihre Umgebungsvariablen zu geben.

habe ich Rails Einstellungen Cached verwendet.

Es ist sehr einfach zu bedienen, hält Ihre Konfigurationswerte im Cache gespeichert und ermöglicht es Ihnen, sie dynamisch zu ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top