Ich weiß von heroku, dass es möglich ist, Umgebungsvariablen hinzuzufügen, indem lokal heroku config:add MY_ENV_VAR=123
ausgeführt wird. Wie kann ich das Gleiche mit dem Motoryard erreichen?Umgebungsvariablen in Engineyard setzen
Antwort
Ich glaube nicht, dass Sie = /.
Eine Problemumgehung, die wir mit unseren Rails-Anwendungen verwenden, besteht darin, ssh (ey ssh) an EngineYard zu senden und eine Datei in vim /data/your_app_name/shared/config/exports.rb zu erstellen. Diese Datei kann wie folgt aussehen:
ENV["AWS_ACCESS_KEY_ID"] = "your key"
ENV["AWS_SECRET_ACCESS_KEY"] = "your secret"
ENV["AWS_BUCKET"] = "your bucket"
dann in config/boot.rb benötigen Sie die Datei:
require File.expand_path('./exports', File.dirname(__FILE__))
Das ist weder schön, noch mühelos. Es erlaubt Ihnen jedoch, Geheimnisse in Ihrer App zu verwenden, die Sie nicht in die Quellcodeverwaltung einchecken sollten!
Wir stießen auf das gleiche Problem und baten EngineYard um Hilfe. Jim Neath von EY kam mit der folgenden Antwort zurück:
Leider Passagier nicht Umgebungsvariablen aus dem System übergeben. Was Sie tun müssen, ist eine rubin Wrapper erstellen, die Ihre Umgebungsvariablen und Einführung Passagier mit diesem definiert, wie hier beschrieben:
http://blog.phusion.nl/2008/12/16/passing-environment-variables-to-ruby-from-phusion-passenger/
Ich habe Sie erstellt eine grundlegende kundenspezifische Koch Rezept, das nur dies tun :
https://github.com/jimneath/ey-cloud-recipes/tree/master/cookbooks/passenger_env_vars
Sie müssen die folgende Datei mit Ihrer Umgebung Variablen aktualisieren:
/ey-cloud-recipes/blob/master/cookbooks/passenger_env_vars/templates/default/env.custom.erb
Ich dachte mir, ich sollte alle wissen lassen, dass diese benutzerdefinierten Rezepte fehlerhaft sind (vermutlich, weil sie so alt sind). default.rb sollte lauten: 'if ['app_master', 'app', 'solo']. include? (node [: instance_role])' anstelle von 'if [' app_master ',' app ',' solo ']. einschließen? (node [: role]) ' – WattsInABox
Das ist ziemlich einfach für Unicorn env.custom verwenden. Werfen Sie einen Blick auf meine Antwort hier https://stackoverflow.com/a/13741463/1520775
Wenn Sie eine Harke Task ausgeführt werden soll (dh Cron-Job), die diese Umgebungsvariablen benötigt, speichern Sie die Variablen in /data/my_app/shared/config/env.custom
source /data/my_app/shared/config/env.custom && cd /data/my_app/current/ && bundle exec rake my_rake_task
Ich war auch mit Heroku
zuvor jetzt zog ich nach Engineyard
. So bekomme ich meine Umgebungsvariablen in Heroku
Ich habe gem figaro
hinzugefügt. Dieses Juwel braucht im Grunde Datei application.yml
in app/config
Verzeichnis. Wenn die App Rails
initialisiert wird, wird sie ausgeführt und lädt das im Format YAML
festgelegte Schlüsselwertpaar in den Speicher. In Heroku
Figaro
hat Option, den Inhalt von application.yml
festzulegen.
$ figaro heroku:set -e production
Allerdings In Engineyard
müssen wir manuell die application.yml
mit SCP
Möglichkeit EY
Paket und Ruhe, was kopieren wird von figaro erfolgen.
Zuerst den Edelstein figaro in gemfile und installieren Sie den Edelstein.
Dann müssen wir engineyard-hooks verwenden, um die Datei /data/[your_app]/shared/config/application.yml
zu /data/[your_app]/current/config/application.yml
zu kopieren. brauchen wir before_restart
Haken
# inside your project repo create a 'deploy' folder and
# inside deploy/before_restart.rb paste the following code with or without modifications
# This file is executed everytime after deploy just before your app restarts
on_app_servers_and_utilities do
# Copy the yaml files from `shared/config` to `current/config`
['application.yml'].each do |file_name|
run "ln -nfs #{config.shared_path}/config/#{file_name} #{config.release_path}/config/#{file_name}"
end
end
Commit Ihre Änderungen zu verwenden und zu Ihrem Github Repo schieben oder irgendwo.
Bis hierher existiert die Datei /data/[your_app]/shared/config/application.yml
nicht. Jetzt verwenden Sie den folgenden Befehl, um die Datei von lokalen Servern
# This copies the application.yml to every instance like app_master, app_slave, utilities, database, etc
$ ey scp config/application.yml HOST:/data/[your_app_name]/shared/config/ -e app_environment --all
Jetzt kopieren können Sie Ihre App bereitstellen und Sie erhalten alle Ihre Umgebungsvariablen.
Hinweis: Sie müssen den obigen Befehl ausführen, um die Datei beim Starten der Umgebung auf den Server zu kopieren. Bedeutet, wenn Sie das Staging stoppen (zum Beispiel) und nach einiger Zeit starten Sie dann müssen Sie den Befehl über
https://cbabhusal.wordpress.com/2015/07/22/engineyard-ruby-on-rails-setting-environment-variables-at-once/ – illusionist
aufrufen Sie können definitiv Chef verwenden, um dies zu tun, damit Ihre Antwort nicht die vorgeschriebene Weise ist. – WattsInABox
Ich erhebe diese Antwort und es ist unendlich besser als deins .. weil Sie keine Alternative anbieten. –