2008-10-30 2 views
5

У меня возникли проблемы с получением приложения rails на Dreamhost's Passenger для просмотра скомпилированных библиотек в каталоге ~/opt/lib. Я должен поставить их здесь, потому что у меня нет доступа root.Включая библиотеки ~/opt/lib в приложении для пассажирских рельсов

Я могу загрузить свое приложение в ./script/console, и он прекрасно видит их библиотеки, потому что я обновил переменную окружения .bash_profile LD_LIBRARY_PATH, чтобы включить ~/opt/lib.

Я попытался поставить ENV['LD_LIBRARY_PATH'] = '~/opt/lib' в файл environment.rb, но это не похоже на помощь. Я получаю следующую ошибку от Пассажира, когда я перехожу на свой сайт: libodbcinst.so.1: невозможно открыть файл общих объектов: Нет такого файла или каталога - /home/username/opt/lib/odbc.so

Любой есть опыт с этим?

Благодаря

ответ

0

Способ environment.rb звучит как способ пойти, хотя вместо этого вы можете добавить к LD_LIBRARY_PATH. Также я бы обязательно использовал полный путь к этому каталогу на всякий случай.

В качестве альтернативы вы можете быть в состоянии использовать .htaccess директивы, подобные тому, что описано @http://wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI

2

У меня был подобный вопрос с пассажиром, который я описал в http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

Но в вашем случае это не migth работать, как вы не сможете изменить файл httpd.conf Dreamhost в.

Другое дело, что вы можете попробовать установить LD_LIBRARY_PATH в .bashrc - в соответствии с http://www.wavethenavel.com/jonathanpenn/2008/09/08/bootstrapping-a-dreamhost-account-for-rails-and-git/ это сработало в случае Dreamhost. Не подтвердили, что Passenger выполнит .bashrc перед запуском ruby.

1

Использование .bashrc не будет работать, поскольку путь библиотеки, который использует Пассажир, является тем, который загружает Apache при загрузке. Невозможно, чтобы он смотрел на каталог пользователя, поскольку это будет серьезной проблемой безопасности.

0

Это старая нить, но для полноты это, как достичь своей цели:

  1. Не установите LD_LIBRARY_PATH, если это возможно - это ужасно.
  2. Поскольку у вас нет контроля над окружением, которое окружает среда пользователя Apache , попытка установить LD_LIBRARY_PATH env var для вышеописанные методы не будут работать.
  3. Установите переменную среды LDFLAGS с линии и пути записи флагов, установленных перед составлением библиотечных файлов, чтобы установить правильные пути поиска - например:

    экспорт LDFLAGS = "- L $ HOME/OPT/Библиотека -R $ HOME/opt/lib "

После скомпилирования файлы будут иметь правильные ссылки, установленные для соответствующих библиотек. Вы можете проверить это с помощью инструмента командной строки ldd - например:

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