2012-09-09 8 views

Antwort

4

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!

+1

aufrufen Sie können definitiv Chef verwenden, um dies zu tun, damit Ihre Antwort nicht die vorgeschriebene Weise ist. – WattsInABox

+0

Ich erhebe diese Antwort und es ist unendlich besser als deins .. weil Sie keine Alternative anbieten. –

9

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

+2

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

1

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 
1

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 HerokuFigaro 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

+0

https://cbabhusal.wordpress.com/2015/07/22/engineyard-ruby-on-rails-setting-environment-variables-at-once/ – illusionist