2017-12-21 1 views
2

Ich habe einige Konstanten, die ich in meiner App verwende. Ich würde sagen, es gibt drei Arten:Rails 4.2 Konstanten - wo sie zu setzen: application.yml vs benutzerdefinierte config file.rb

  1. einige sind wirklich Passwörter externe Sachen wie sendgrid Login/Passwort

  2. einige sind intern „Geheimcodes“ wie geheime ersinnen Schlüssel

  3. Einige sind genau das, was ich globale Konstanten nennen würde, das heißt, dass es Konstanten gibt, die wir in der ganzen App verwenden und nicht wollen, dass irgendjemand dies leicht ändert. Sie ändern sich fast nie. Einige Beispiele: die ID unserer Facebook-Seite oder die Anzahl der Deals "pro Seite" definieren wir in unserem unendlichen Scrollen auf der Homepage (kritisch für UX), oder die URL unseres markenvalidierten Logos auf aws cdn (in vielen Anzeigen von Dateien html.erb und Assets javascript .js-Dateien). Ein Aspekt, an den ich mich auch bei der Beantwortung meiner Frage erinnere, ist, dass, selbst wenn sie weniger kritisch erscheinen als ein Devise-Schlüssel, ich gerne sammeln würde, um sicherzustellen, dass nur sehr wenige Menschen und nur autorisierte Entwickler diese kritischen Daten ändern können .

Hier ist, was wir heute tun:

  • Für 1 und 2: habe ich die Konstanten auf config/application.yml

  • Und für 3: Ich auf eine der Konstanten setzen Benutzerdefinierte .rb-Konfigurationsdatei wie im offiziellen Rails-Handbuch beschrieben (guides.rubyonrails.org/v4.2/configuring.html#custom-configuration) Beispiel: on /config/initializers/app_custom.rb

    Rails.application.configure do   
        config.x.infite_scrollhp_feed_per_page_deals = 30 
    end 
    

dann wird es in einem Controller auf diese Weise genannt:

nb_per_page = Rails.configuration.x.infite_scrollhp_feed_per_page_deals 

Aber jedes Mal, wenn ich nicht sicher bin, wenn ich globale Konstanten innerhalb config/application.yml oder in meiner benutzerdefinierten Config-Datei .rb setzen sollte ?

Was ist der empfohlene "Rails -way"? Wie kann ich entscheiden, wo ich sie hinstellen soll? Gibt es eine allgemein akzeptierte "Gut-Sinn"/"bewiesene effiziente/gut strukturierende" Praxis/Regel?

Auch gibt es eine andere Leistung, das heißt, Application.yml "injiziert" schneller in Ansicht (.html) und Assets (.js) -Dateien, wenn Benutzer eine Seite laden, als wenn sie in meiner benutzerdefinierten Konfiguration definiert sind Datei ?

Antwort

1

rate ich würde config/secrets.yml für sensible Daten (1 und 2) mit:

development: 
    some_password: ... 

    test: 
    some_password: ... 

    production: 
    some_password: <%= ENV["SOME_PASSWORD"] %> 

Auf diese Weise können Sie verschiedene Einstellungen für verschiedene Umgebungen (für Entwicklung, Test und Produktion) setzen. Und ich würde sehr empfehlen, die Produktion sensible Daten in ENV Variablen zu halten.

Wenn es für nicht sensible Daten (3) geht, würde ich config/environments/*.rb Dateien einfügen, wenn verschiedene Einstellungen für verschiedene Umgebungen benötigt werden. Wenn das nicht der Fall ist und die Einstellung für alle Umgebungen gleich ist, würde ich es in application.rb, application.yml oder in einer benutzerdefinierten Datei in oder sogar als Klassenkonstanten setzen.

+0

dann in Ihrer Vision, was würde in config/application.yml bleiben? nichts? – Mathieu

+0

übrigens, die Datei config/application.yml ist nicht in unserem Repo festgelegt, also was in application.yml bleibt "geheim" :-) – Mathieu

+0

danke für deine Antwort, interessante Strategie. – Mathieu