Definieren Sie zusätzliche "$ PATH" für Passagiere oder Nginx

470
berkes

Ich habe einen Server mit nginx und Passenger, der eine Ruby on Rails-App bedient. Es verwendet Bundler.

Irgendwo in diesem Stapel wird das $PATHeingestellt /var/www/APPNAME/shared/bundle/ruby/1.8/bin/. Dieses Verzeichnis enthält tatsächlich ausführbare Gems.

Aber ich brauche meine Anwendung auch /usr/binin seiner $PATH. Genauer gesagt: Ich brauche es, um laufen zu können idendtify, convertund mogrify; Imagemagick-Befehle.

Im Moment habe ich diese imagemagick Binaries von /var/www/APPNAME/shared/bundle/ruby/1.8/bin/:

ls /var/www/APPNAME/shared/bundle/ruby/1.8/bin/ -ahl #... lrwxrwxrwx 1 root root 16 May 8 16:22 convert -> /usr/bin/convert -rwxr-xr-x 1 ber root 379 Jan 11 08:58 erubis #... 

Es ist jedoch eher ein schneller Hack als eine tatsächliche Lösung.

Wie kann ich zusätzliche Verzeichnisse zuweisen $PATH? Und wo soll ich das machen? Passagier, Nginx, die Rails-App?

1

1 Antwort auf die Frage

1
vgoff

Die Rubin-Optionen sind eine gute Möglichkeit, dies zu tun. Geben Sie an, dass $ LOAD_PATH / usr / bin hat.

-Idirectory specify $LOAD_PATH directory (may be used more than once) 

Dafür ist es schließlich da.

Eine weitere Möglichkeit ist, das Verzeichnis auf die $: globale Psuedo-Variable zu verschieben.

$:.push("/usr/bin") 

Dies würde überall dort passen, wo Sie Ihre Umgebung in Ihrer Anwendung anpassen.

Ich würde dies wahrscheinlich für die Rails-Anwendung selbst tun, da Sie sich darum kümmern. Es ist, worüber Sie die Kontrolle haben.

Vielen Dank! Ich habe Zugriff auf den gesamten Stack (da ich ihn selbst installiert habe), obwohl ich mit der Ruby-App bestens vertraut bin. Es laufen jedoch mehr Apps, daher würde ich es vorziehen, dies so niedrig wie möglich zu gestalten: Nginx oder Passagier. Und nicht (wie jetzt schon) in das Bundle gehackt :). berkes vor 11 Jahren 0
Als ich sagte, es ist, worüber Sie die Kontrolle haben, sprach ich über die Edelsteine, die Sie verwenden. Edelsteine ​​werden aktualisiert und überschreiben möglicherweise Ihre Einstellung. Die Anwendung, die Sie schreiben, haben Sie die Kontrolle und diese Art der Änderung wird nicht überschrieben. Das meine ich. vgoff vor 11 Jahren 0
Ich würde dann wahrscheinlich den Pfad zur .bashrc-Datei hinzufügen. vgoff vor 11 Jahren 0
.bashrc? der www-data benutzer hat keine shell, nicht? Oder fehlt mir etwas? berkes vor 11 Jahren 0
www-data: x: 33: 33: www-data: / var / www: / bin / sh auf meinem System und hat / bin / sh als Shell für die Arbeit ... vgoff vor 11 Jahren 1