Codieren Sie niemals vertrauliche Informationen (Anmeldeinformationen, Passwörter usw.) fest . Erstellen Sie stattdessen eine Datei, um diese Informationen als Umgebungsvariablen (Schlüssel / Wert-Paare) zu speichern, und schließen Sie diese Datei von Ihrem Quellcode-Verwaltungssystem aus. Schließen Sie diese Datei beispielsweise in Bezug auf Git (Quellcodeverwaltungssystem) aus, indem Sie sie hinzufügen. Gitignore :
-bash> echo '/config/app_environment_variables.rb' >> .gitignore
/config/app_environment_variables.rb
ENV['HTTP_USER'] = 'devuser'
ENV['HTTP_PASS'] = 'devpass'
Fügen Sie außerdem die folgenden Zeilen /config/environment.rb
zwischen der require
Zeile und der Application.initialize
Zeile hinzu:
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
load(app_environment_variables) if File.exists?(app_environment_variables)
Das ist es!
Wie der obige Kommentar sagt, laden Sie auf diese Weise Ihre Umgebungsvariablen zuvor environments/*.rb
, was bedeutet, dass Sie auf Ihre Variablen in diesen Dateien verweisen können (z environments/production.rb
. B. ). Dies ist ein großer Vorteil gegenüber dem Einfügen Ihrer Umgebungsvariablendatei /config/initializers/
.
Im Inneren app_environment_variables.rb
müssen Umgebungen nicht in Bezug auf Entwicklung oder Produktion unterschieden werden, da Sie diese Datei niemals in Ihr Quellcode-Verwaltungssystem übertragen werden. Daher ist sie standardmäßig für den Entwicklungskontext vorgesehen . Aber wenn Sie für die zu Satz etwas Besonderes benötigen Testumgebung (oder für Gelegenheiten , bei denen Sie testen Produktionsmodus lokal ), fügen Sie einfach einen bedingten Block unter allen anderen Variablen:
if Rails.env.test?
ENV['HTTP_USER'] = 'testuser'
ENV['HTTP_PASS'] = 'testpass'
end
if Rails.env.production?
ENV['HTTP_USER'] = 'produser'
ENV['HTTP_PASS'] = 'prodpass'
end
Starten Sie app_environment_variables.rb
den App-Server bei jedem Update neu. Angenommen, Sie verwenden Apache / Passenger oder rails server
:
-bash> touch tmp/restart.txt
Verweisen Sie in Ihrem Code wie folgt auf die Umgebungsvariablen:
def authenticate
authenticate_or_request_with_http_basic do |username, password|
username == ENV['HTTP_USER'] && password == ENV['HTTP_PASS']
end
end
Beachten Sie, dass app_environment_variables.rb
Sie im Inneren Boolesche Werte und Zahlen als Zeichenfolgen angeben müssen (z. B. ENV['SEND_MAIL'] = 'false'
nicht nur false
und ENV['TIMEOUT'] = '30'
nicht nur 30
), da sonst die Fehler can't convert false into String
bzw. angezeigt werdencan't convert Fixnum into String
.
Speichern und Weitergeben vertraulicher Informationen
Der letzte Knoten ist: Wie können Sie diese vertraulichen Informationen mit Ihren Kunden und / oder Partnern teilen? Zum Zwecke der Geschäftskontinuität (dh wenn Sie von einem Sternschnuppen getroffen werden, wie werden Ihre Kunden und / oder Partner den vollen Betrieb der Website wieder aufnehmen?) Müssen Ihre Kunden und / oder Partner alle für Ihre App erforderlichen Anmeldeinformationen kennen . Das E-Mailen / Skyping dieser Dinge ist unsicher und führt zu Unordnung. Das Speichern in freigegebenen Google Text & Tabellen ist nicht schlecht (wenn jeder https verwendet), aber eine App zum Speichern und Freigeben kleiner Leckerbissen wie Kennwörter wäre ideal.
So legen Sie Umgebungsvariablen in Heroku fest
Wenn Sie eine einzige Umgebung auf Heroku haben:
-bash> heroku config:add HTTP_USER='herouser'
-bash> heroku config:add HTTP_USER='heropass'
Wenn Sie mehrere Umgebungen auf Heroku haben:
-bash> heroku config:add HTTP_USER='staguser' --remote staging
-bash> heroku config:add HTTP_PASS='stagpass' --remote staging
-bash> heroku config:add HTTP_USER='produser' --remote production
-bash> heroku config:add HTTP_PASS='prodpass' --remote production
Foreman und .env
Viele Entwickler verwenden Foreman (installiert mit dem Heroku Toolbelt ), um ihre Apps lokal auszuführen (im Gegensatz zu Apache / Passenger oder rails server
). Foreman und Heroku geben Procfile
an, welche Befehle von Ihrer Anwendung ausgeführt werden , sodass der Übergang vom lokalen Entwickler zu Heroku in dieser Hinsicht nahtlos verläuft. Ich verwende Foreman und Heroku in jedem Rails-Projekt, daher ist diese Bequemlichkeit großartig. Aber hier ist die Sache. Foreman lädt Umgebungsvariablen, die /.env
über dotenv gespeichert sind, aber leider analysiert dotenv die Datei im Wesentlichen nur für key=value
Paare;; Diese Paare werden nicht genau dort und dann zu Variablen, sodass Sie weder auf bereits festgelegte Variablen verweisen können (um die Dinge trocken zu halten), noch können Sie dort "Ruby" ausführen (wie oben mit den Bedingungen angegeben), was Sie können tun in /config/app_environment_variables.rb
. Zum Beispiel mache ich manchmal solche Sachen, um die Dinge trocken zu halten:
ENV['SUPPORT_EMAIL']='Company Support <support@company.com>'
ENV['MAILER_DEFAULT_FROM'] = ENV['SUPPORT_EMAIL']
ENV['MAILER_DEFAULT_TO'] = ENV['SUPPORT_EMAIL']
Daher verwende ich Foreman, um meine Apps lokal auszuführen, aber ich verwende die .env
Datei nicht zum Laden von Umgebungsvariablen. Vielmehr verwende ich Foreman in Verbindung mit dem /config/app_environment_variables.rb
oben beschriebenen Ansatz.
export admin_password="secret"
nicht sein sollteexport admin_password = "secret"
.