Einschließlich ~ / opt / lib Bibliotheken in einem Passagier Rails App
-
05-07-2019 - |
Frage
Ich habe Probleme bekommen Passagier eine Rails-Anwendung auf Dreamhost der kompilierten Bibliotheken zu sehen in meinem ~ / opt / lib. Ich habe sie hier setzen, weil ich keinen Root-Zugang haben.
Ich kann meine app in ./script/console booten und es sieht ihr Bibliotheken nur in Ordnung, weil ich meine Bash_profile der LD_LIBRARY_PATH
Umgebungsvariable aktualisiert, um ~ / opt / lib.
Ich habe versucht Putting ENV['LD_LIBRARY_PATH'] = '~/opt/lib'
in meiner environment.rb-Datei, aber es scheint nicht zu helfen. Ich erhalte die folgenden Fehler von Passagiere, wenn ich auf meiner Website navigieren:
libodbcinst.so.1: kann nicht mit anderen geteilt öffnen Objektdatei: Keine solche Datei oder das Verzeichnis - /home/username/opt/lib/odbc.so
Jedermann hat Erfahrung mit dieser?
Danke
Lösung
Die environment.rb Weise klingt wie die Art und Weise zu gehen, wenn Sie stattdessen LD_LIBRARY_PATH
möchten anhängen. Ich würde auch für den Fall, stellen Sie sicher, zu diesem Verzeichnis den vollständigen Pfad zu verwenden.
Alternativ können Sie möglicherweise .htaccess
Richtlinien, ähnlich zu verwenden, was @ http: / /wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI
Andere Tipps
Ich hatte ähnliches Problem mit Passagiere, die ich beschrieben in http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/
Aber in Ihrem Fall dieses migth nicht funktionieren, da Sie nicht in der Lage sein werden, Dreamhost httpd.conf Datei zu ändern.
Andere Sache, die Sie versuchen können, ist LD_LIBRARY_PATH in .bashrc gesetzt - nach http://www.wavethenavel.com/jonathanpenn/2008/09/08/bootstrapping-a-dreamhost-account-for-rails-and-git/ dies in Dreamhost Fall gearbeitet. Noch nicht überprüft, dass Passagier Bashrc vor dem Start Rubin ausgeführt wird.
.bashrc
Verwendung wird nicht funktionieren, da die Bibliothek Pfad, Passagier verwendet, ist derjenige beim Booten, die Apache Lasten. Es gibt keine Möglichkeit, es in einem Benutzerverzeichnis aussehen würde wie ein großes Sicherheitsproblem wäre.
Dies ist ein alter Thread, aber der Vollständigkeit halber ist dies, wie Sie Ihr Ziel erreicht haben:
- Stellen Sie den LD_LIBRARY_PATH wenn möglich - es horrend ist .
- Wie Sie haben keine Kontrolle über die Umgebung, dass die Apache Benutzerumgebung, versucht, eine LD_LIBRARY_PATH env var pro einstellen die oben genannten Methoden wird sowieso nicht funktionieren.
-
Stellen Sie die LDFLAGS Umgebungsvariable mit Link und Aufnahmepfad Flags gesetzt, bevor die Bibliotheksdateien zu kompilieren, die richtigen Suchpfade einstellen - z.
export LDFLAGS = "- L $ HOME / opt / lib -R $ HOME / opt / lib"
Sobald kompiliert, müssen die Dateien die richtigen Links zu den entsprechenden Bibliotheken gesetzt. Sie können prüfen, diese LDD-Kommandozeilen-Tool verwenden - z.
ldd /$HOME/your/custom/complied/library/file.so