Ich habe Passenger in Entwicklung (Mac OS X) eingerichtet und es funktioniert einwandfrei. Das einzige Problem kam später: Jetzt habe ich einen benutzerdefinierten GEM_HOME
Pfad und ImageMagick Binärdateien in "/usr/local"
installiert. Ich kann sie in eine der Shell-RC-Dateien einfügen, die aussortiert werden, und das löst die Umgebungsvariablen für Prozesse, die von der Konsole erzeugt wurden; aber was ist mit Passagier? Dieselbe Anwendung kann meine Edelsteine nicht finden, wenn sie auf diese Weise ausgeführt werden.Einstellung der Umgebungsvariablen für Phusion Passagieranwendungen
Antwort
Ich kenne zwei Lösungen. Die erste (dokumentiert here) ist im Wesentlichen die gleiche wie Manveru-setzen Sie die ENV-Variable direkt in Ihrem Code.
Die zweite ist, einen Wrapper um den Ruby-Interpreter zu erstellen, den Passagier verwendet, und ist dokumentiert here (suchen Sie nach passagier_with_ruby). Der Kern ist, dass Sie erstellen (und PassengerRuby in der Apache-Konfiguration Punkt)/usr/bin/ruby_with_env, eine ausführbare Datei, bestehend aus:
#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*
Beide arbeiten; der frühere Ansatz ist ein bisschen weniger hackisch, denke ich.
Nur für den Fall jemand anderes läuft auf das gleiche Problem hatte ich: nicht vergessen, chmod + x/usr/bin/ruby_with_env'. –
Da dies eine alte Antwort ist, möchte ich nur bestätigen, dass diese Antwort immer noch die empfohlene Methode zur Behandlung dieses Problems zu sein scheint. Weitere Referenzen: http://blog.phusion.nl/2008/12/ 16/passing-environment-variables-to-ruby-from-phusion-passagier/und: http://dev.mensfeld.pl/2011/09/phus-passenger-and-environment-variables-with-ruby-rake- Anwendungen/ – Felixyz
In jüngerer Zeit sieht das so aus c erhängt. Seit Version 4.0 können Sie die Apache-Anweisungen 'PassEnv' und 'SetEnv' verwenden: http://www.modrails.com/documentation/Users%20guide%20Apache.html#env_vars_passenger_apps – nielsbot
Ich bin in dieses Problem auch gelaufen. Es appears, dass Passagier nicht Werte durch die SetEnv
Apache-Richtlinie setzt - was bedauerlich ist.
Vielleicht könnte es möglich sein, die Umgebungsvariablen in Ihrem environment.rb oder boot.rb gesetzt (vorausgesetzt, Sie sprechen über eine Rails-Anwendung, ich mit Gestell nicht vertraut bin, aber vermutlich hat es eine ähnliche Funktionalität)
bevor Sie beliebig erfordert (vor allem vor erforderlich rubygems) Sie tun können:
ENV['GEM_HOME'] = '/foo'
Dies wird die Umgebungsvariable innerhalb dieses Prozesses ändern.
Ich habe herausgefunden, dass wenn Sie root priviledges auf dem Computer haben, können Sie die notwendigen Umgebungsvariablen in der Datei "envvars" einstellen und apachectl führt diese Datei aus, bevor Apache gestartet wird.
envvars befindet sich normalerweise im selben Verzeichnis wie apachectl - unter Mac OS X befindet es sich in/usr/sbin. Wenn Sie es nicht finden können, suchen Sie in der Quelle des Apachectl-Skripts.
Nachdem Sie die envvars-Datei geändert haben, starten Sie Apache mit "apachectl -k restart" neu.
Update: seit Passagier 2.2.3 wird die "SetEnv-Direktive unterstützt: http: //blog.phusion.nl/2009/06/17/phusion-passenger-223-released-bug-fix-edition/ richtig. Technik von Ben's Antwort gedient mir sehr gut, aber jetzt gibt es keine Notwendigkeit, es mehr zu verwenden (in den meisten Fällen) – mislav