Définition de variables d'environnement pour les applications Phusion Passenger
-
09-06-2019 - |
Question
J'ai configuré Passenger en développement (Mac OS X) et cela fonctionne parfaitement. Le seul problème est venu plus tard: j'ai maintenant un chemin personnalisé GEM_HOME
et des fichiers binaires ImageMagick installés dans "/ usr / local" /
. Je peux les mettre dans l'un des fichiers rc du shell qui ont été obtenus, ce qui résout les variables d'environnement pour les processus générés à partir de la console; mais qu'en est-il passager? La même application ne peut pas trouver mes pierres précieuses lorsqu'elle est exécutée de cette manière.
La solution
Je connais deux solutions. La première (documentée ici ) est essentiellement la même que celle de manveru & # 8212; définissez la variable ENV directement dans votre code.
La seconde consiste à créer un wrapper autour de l'interpréteur Ruby utilisé par Passenger. Il est documenté ici (recherchez passenger_with_ruby). L’essentiel est que vous créez (et pointez PassengerRuby dans votre configuration Apache) / usr / bin / ruby_with_env, un fichier exécutable composé de:
#!/bin/bash
export ENV_VAR=value
/usr/bin/ruby $*
Les deux fonctionnent; la première approche est un peu moins féroce, je pense.
Autres conseils
Avant que vous ne fassiez quelque chose (surtout avant que vous ayez besoin de rubygems), vous pouvez faire:
ENV['GEM_HOME'] = '/foo'
Ceci modifiera la variable d'environnement dans ce processus.
J'ai découvert que, si vous disposez de privilèges root sur votre ordinateur, vous pouvez définir les variables d'environnement nécessaires dans " envvars " fichier et apachectl exécutera ce fichier avant de lancer Apache.
envvars se trouve généralement dans le même répertoire que celui d’apachectl. Sous Mac OS X, il se trouve dans / usr / sbin. Si vous ne le trouvez pas, cherchez la source du script apachectl.
Après avoir modifié le fichier envvars, redémarrez Apache avec "apachectl -k restart".
J'ai aussi rencontré ce problème. Il apparaît que le passager ne transmet pas les valeurs définies à l'aide du SetEnv
directive apache - ce qui est regrettable.
Peut-être qu'il serait peut-être possible de définir des variables d'environnement dans votre environment.rb ou boot.rb (en supposant que vous parlez d'une application Rails; je ne connais pas bien Rack, mais il a vraisemblablement des fonctionnalités similaires)