Ich erstelle eine Google Rails-App, die Daten aus Google Analytics mithilfe der Google API-Client-Bibliothek für Ruby abruft.
Ich benutze OAuth2 und kann alles, was in der Entwicklung auf einem lokalen Rechner läuft, bekommen. Mein Problem ist, dass die Bibliothek eine heruntergeladene Datei, client_secrets.json
, verwendet, um zwei geheime Schlüssel zu speichern.
Problem: Ich verwende Heroku und brauche einen Weg, um die Datei auf ihre Produktionsserver zu bekommen.
Ich möchte diese Datei nicht meinem github Repo hinzufügen, da das Projekt öffentlich ist.
Wenn es eine Möglichkeit gibt, die Datei vorübergehend zu git hinzuzufügen, drücken Sie auf Heroku und entfernen Sie die Datei von git, die in Ordnung wäre. Mein Gefühl ist, dass die Schlüssel in den Commits sind und sehr schwer zu verhindern, auf GitHub zu zeigen.
Versucht: Soweit ich das beurteilen kann, kann man eine Datei nicht über eine Bash-Konsole an Heroku schicken. Ich glaube, wenn du das tust, bekommst du einen neuen Dyno und alles, was du hinzufügst, wäre nur vorübergehend. Ich habe das versucht, aber SCP konnte nicht richtig funktionieren, also bin ich mir nicht 100% ig sicher.
Versucht: Ich schaute auf das Speichern der JSON-Datei in einem Environment oder Config Var, konnte es aber nicht zum Laufen bringen. Dies scheint der beste Weg zu sein, wenn jemand einen Gedanken hat. Ich stehe oft in Schwierigkeiten, wenn Ruby JSON in einen String oder Hash konvertiert, also brauche ich hier vielleicht nur Anleitung.
Versucht:
Zusätzlich habe ich versucht, einen Weg zu finden, die Schlüssel einfach aus der JSON-Datei herauszunehmen, sie in Config Vars zu platzieren und die JSON-Datei zu git hinzuzufügen. Ich kann jedoch keine Möglichkeit finden, ENV["KEY"]
in eine JSON-Datei zu stellen.
Beispielcode Die Google-Bibliothek verfügt über eine Methode , die die JSON-Datei zum Erstellen eines Autorisierungsclients lädt . Der Client ruft dann ein Token ab (oder gibt eine Autorisierungs-URL).
%Vor%** Beachten Sie, dass das Beispiel auf der Google-Seite keinen Dateinamen anzeigt, da es einen Standard-ENV-Var verwendet, der auf einen Pfad festgelegt wurde
Ich denke, das wäre viel einfacher, wenn die Methode ClientSecrets.load()
nur JSON, eine Zeichenfolge oder einen Hashwert verwenden würde, die in eine Konfigurationsvariable gehen könnten.
Leider scheint es immer einen Dateipfad zu geben. Wenn ich JSON, eine Zeichenfolge oder einen Hash füttere, explodiert es. Ich habe jemanden gesehen, der das Problem mit einem p12-Schlüssel umgehen konnte , aber ich bin nicht sicher, wie ich das in meiner Situation replizieren soll.
Habe nicht versucht: Mein einziger anderer Weg (abgesehen von der Umstellung auf AWS) besteht darin, die JSON-Datei auf AWS zu setzen und bei Bedarf Rails zu ziehen. Ich bin nicht sicher, ob dies im laufenden Betrieb erfolgen kann oder ob die Datei beim Hochfahren des Rails-Servers heruntergezogen werden muss. Scheint wie zu viel Arbeit, aber an diesem Punkt habe ich ein paar Stunden damit verbracht, es zu versuchen.
Dies ist der spezifische Controller, an dem ich arbeite: Ссылка
Bei der Suche nach GitHub habe ich herausgefunden, dass jemand eine andere Methode verwendet hat, die einen JSON-String als Argument anstelle eines Dateipfads verwendet: Google::APIClient::ClientSecrets.new(JSON.parse(ENV['GOOGLE_CLIENT_SECRETS']))
Damit kann ich den JSON in einen ENV VAR einpacken. Die Welt macht wieder Sinn.
Ich habe das gleiche Problem mit Google API festgestellt. Am Ende benutzte ich openssl, um der p12-Datei eine neue, sehr geheime Passphrase zuzuweisen, diese neue Datei im Repo zu speichern und dann die Passphrase in App-Secrets und auf Heroku env-Variablen zu setzen.
Auf diese Weise befindet sich die Datei im Repo, aber sie kann nicht ohne Passphrase abgerufen / gelesen werden.
Dieser Beitrag war hilfreich beim Ändern Das Standard-Passwort für Google P12 von 'notasecret' zu etwas Sicherem.
%Vor%Wie in diesem Thema erläutert, anstatt einen Pfad anzugeben In eine JSON-Schlüsseldatei können Sie stattdessen drei ENV-Variablen eingeben:
%Vor%Tags und Links ruby ruby-on-rails git json heroku