Rails - Bereitstellung von Lizenzschlüsseln Basierend auf Plugin auf Hostnamen
-
11-09-2019 - |
Frage
Ich bin mit New Relic für Rails, aber nur New Relic muss meine eine Produktionsumgebung überwachen. Aber ich habe einen Staging-Server, auch in Produktionsmodus läuft. sowohl als Betriebs prod Instanzen meiner Anwendung New Relic erkennt (wie es sein sollte), aber ich will nicht zur Überwachung von zwei Instanzen zu zahlen haben, wenn ich ein Auge auf die man nur halten wollen.
New Relic nimmt eine Umgebungsvariable für den Lizenzschlüssel:
license_key: <%= ENV['NEWRELIC_ACCOUNT_KEY'] %>
Ist es möglich, die Hostnamen in den Umgebungsdateien (das heißt config / Umgebungen / production.rb) zu erfassen, so dass ich dynamisch diese Umgebungsvariable definieren kann?
sind beide Umgebungen aus der gleichen Git-Repository, gleicher Quellcode Basis eingesetzt, so kann ich es nicht wirklich für jeden deploy im Code ändern - es wäre am besten in der Lage sein, um die Umgebungsvariable irgendwie dynamisch zu definieren
Alle Gedanken würden geschätzt! Dank!
Lösung
Das New Relic Ruby-Agent wird die newrelic.yml
Konfigurationsdatei als ERB analysieren, bevor sie als YAML Parsen. Daher können Sie viele nette Tricks, wie zum Beispiel:
production:
license_key: <%= Socket.gethostname == 'mission-critical.example.com' ? 'PAID_ACCOUNT_LICENSE_KEY' : 'FREE_LITE_ACCOUNT_LICENSE_KEY' %>
Das Parsen geschieht alles bei ca. Booten.
Wenn Ihr RAILS_ENV unterscheidet sie von ‚Produktion‘ in diesem Staging-Server, „in dem Produktionsmodus“ läuft, dann könnte man nur die Umwelt Abschnitte verwenden, wie Steve Graham schlägt.
Andere Tipps
Haben Sie eine separate Umgebung für die Inszenierung geschaffen? das heißt Entwicklung, Test, Produktion und Inszenierung? Siehe hier Anweisungen ...
Nachdem das getan, ein Verhalten für die Umwelt in config/newrelic.yml
angeben
common: &default_settings
license_key: 'PASTE_YOUR_KEY_HERE'
…
development:
enabled: false
…
test:
enabled: false
…
production:
enabled: true
…
staging:
enabled: false
…
etc, etc
Der Hostname ist nur in einem Request-Objekt zur Verfügung, so nein, es ist nicht möglich, wenn Schienen die Umwelt baut.
Ich würde nur Ihre Inszenierung deploy Skript einrichten kopieren production.rb staging.rb und die App in „staging“ zu starten. Eine andere Technik wäre nicht die newrelic.yml in Ihrem scm zu halten und es stattdessen kopieren, oder zu verknüpfen, von woanders zum aktuellen Verzeichnis deploy.