在Passenger Rails应用程序中包含〜/ opt / lib库

时间:2008-10-30 15:47:47

标签: ruby-on-rails ruby passenger dreamhost

我无法在Dreamhost的Passenger上获取rails应用程序,以查看〜/ opt / lib目录中的已编译库。我必须把它们放在这里,因为我没有root权限。

我可以在./script/console中启动我的应用程序,它看到它们库很好,因为我更新了我的.bash_profile的LD_LIBRARY_PATH环境变量以包含〜/ opt / lib。

我已经尝试将ENV['LD_LIBRARY_PATH'] = '~/opt/lib'放在我的environment.rb文件中,但它似乎没有太大帮助。当我导航到我的网站时,我从Passenger收到以下错误: libodbcinst.so.1:无法打开共享对象文件:没有这样的文件或目录 - /home/username/opt/lib/odbc.so

任何人都有这方面的经验吗?

由于

4 个答案:

答案 0 :(得分:2)

我在http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

中描述了与Passenger类似的问题

但是在你的情况下,这种迁移不起作用,因为你将无法更改Dreamhost的httpd.conf文件。

你可以尝试的另一件事是在.bashrc中设置LD_LIBRARY_PATH - 根据http://www.wavethenavel.com/jonathanpenn/2008/09/08/bootstrapping-a-dreamhost-account-for-rails-and-git/这在Dreamhost的情况下有效。尚未验证Passenger在启动ruby之前是否会执行.bashrc。

答案 1 :(得分:1)

使用.bashrc将不起作用,因为Passenger使用的库路径是Apache在引导时加载的路径。它无法查看用户的目录,因为这将是一个主要的安全问题。

答案 2 :(得分:0)

环境.rb方式听起来像是要走的路,但您可能想要追加到LD_LIBRARY_PATH。此外,为了以防万一,我还要确保使用该目录的完整路径。

或者您可以使用.htaccess指令,类似于@ http://wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI

所描述的指令

答案 3 :(得分:0)

这是一个旧线程,但为了完整性,这是如何实现您的目标:

  1. 如果可能的话,不要设置LD_LIBRARY_PATH - 这太可怕了。
  2. 由于您无法控制Apache的环境 用户的环境,尝试设置LD_LIBRARY_PATH env var per 无论如何,上述方法都无法发挥作用。
  3. 设置LDFLAGS环境变量,并在编译库文件之前设置链接和记录路径标志,以设置正确的搜索路径 - 例如:

    export LDFLAGS =“ - L $ HOME / opt / lib -R $ HOME / opt / lib”

  4. 编译完成后,文件将具有设置到相关库的正确链接。您可以使用ldd命令行工具进行检查 - 例如:

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