2008-10-30 16 views
5

Tengo problemas para obtener una aplicación de rieles en Dreamhost's Passenger para ver bibliotecas compiladas en mi directorio ~/opt/lib. Tengo que ponerlos aquí porque no tengo acceso de root.Incluyendo ~/opt/lib librerías en una aplicación de Pasajeros Rails

Puedo iniciar mi aplicación en ./script/console y las ve muy bien porque actualicé la variable de entorno LD_LIBRARY_PATH de .bash_profile para incluir ~/opt/lib.

He intentado poner ENV['LD_LIBRARY_PATH'] = '~/opt/lib' en mi archivo environment.rb pero parece que no me ayuda demasiado. Aparece el siguiente error de Passenger cuando navego a mi sitio: libodbcinst.so.1: no se puede abrir el archivo de objeto compartido: No existe dicho archivo o directorio - /home/username/opt/lib/odbc.so

Cualquiera tener experiencia con esto?

Gracias

Respuesta

0

La forma environment.rb suena como el camino a seguir, aunque es posible que desee agregar a LD_LIBRARY_PATH en su lugar. También me aseguraré de usar la ruta completa a ese directorio por si acaso.

Alternativamente, usted podría ser capaz de utilizar .htaccess directivas, de forma similar a lo que se describe @http://wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI

2

yo tuvimos problema similar con pasajeros que he descrito en http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

Pero en el caso de que no funcione migth ya que no será capaz de cambiar el archivo httpd.conf de Dreamhost.

Otra cosa que puedes probar es establecer LD_LIBRARY_PATH en .bashrc - de acuerdo con http://www.wavethenavel.com/jonathanpenn/2008/09/08/bootstrapping-a-dreamhost-account-for-rails-and-git/ esto ha funcionado en el caso de Dreamhost. No he verificado que Passenger ejecutará .bashrc antes de ejecutar Ruby.

1

El uso de .bashrc no funcionará, ya que la ruta de acceso de la biblioteca que utiliza Passenger es la que Apache carga al arrancar. No hay forma de que vea el directorio de un usuario, ya que sería un gran problema de seguridad.

0

Este es un hilo viejo, pero está completo esta es la forma de lograr su objetivo:

  1. no hacer establece LD_LIBRARY_PATH si es posible - es horrible.
  2. Como no tiene control sobre el entorno que el entorno del usuario Apache , al intentar establecer una var var LD_LIBRARY_PATH por los métodos anteriores no funcionarán de todos modos.
  3. Establecer la variable de entorno LDFLAGS con las banderas de enlace y ruta de grabación establecidos antes de compilar los archivos de la biblioteca para establecer las correctas rutas de búsqueda - por ejemplo:

    exportación LDFLAGS = "- L $ HOME/opt/lib -R $ HOME/opt/lib "

Una vez compilados, los archivos tendrán los enlaces correctos establecidos en las bibliotecas correspondientes. Puede verificar esto usando la herramienta de línea de comandos ldd - por ejemplo:

ldd /$HOME/your/custom/complied/library/file.so 
Cuestiones relacionadas