5

我无法在 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

4 回答 4

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。

于 2008-10-31T09:11:59.257 回答
1

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

于 2009-01-08T10:05:29.203 回答
0

environment.rb 方式听起来像是要走的路,尽管您可能想要追加到LD_LIBRARY_PATH。另外,我会确保使用该目录的完整路径以防万一。

或者,您可能能够使用.htaccess指令,类似于 @ http://wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI所描述的

于 2009-01-10T20:54:22.707 回答
0

这是一个旧线程,但为了完整起见,这是实现目标的方法:

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

    导出 LDFLAGS="-L$HOME/opt/lib -R$HOME/opt/lib"

编译后,这些文件将具有指向相关库的正确链接。您可以使用 ldd 命令行工具进行检查 - 例如:

ldd /$HOME/your/custom/complied/library/file.so
于 2011-10-16T06:42:41.147 回答