heroku上的第三方库

时间:2019-03-26 01:58:08

标签: ruby-on-rails heroku vendor

我已经通过https://github.com/echan00/wdiff将GNU库'wdiff'添加到了Ruby on Rails应用程序中,并将可执行文件添加到了/vendor/usr/bin目录中。

通过heroku run bash,我可以在wdiff执行~/vendor/usr/bin库。

我已经将/app/vendor/usr/bin添加为LD_LIBRARY_PATH环境变量,但是我的Ruby on Rails应用程序找不到wdiff

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

  

我已将/app/vendor/usr/bin添加为LD_LIBRARY_PATH环境变量,但是我的Ruby on Rails应用程序找不到wdiff

LD_LIBRARY_PATH tells the OS where to find libraries to be dynamically linked at runtime。例如,如果您正在运行需要OpenSSL但不包含OpenSSL的应用程序,则操作系统可以通过LD_LIBRARY_PATH找到它。

{p1}变量中列出了

操作系统应搜索 binary 的目录。尝试改用它。

请注意,将其设置为单个值是非常不寻常的。一种更常见的方法是将您的自定义位置添加或附加到PATH已有的任何值,例如通过类似的

PATH

如果存在多个同名二进制文件,则在路径中较早发现的二进制文件将优先于较晚发现的二进制文件。

最后,是Heroku特有的内容:

  

并将可执行文件添加到我的export PATH="$PATH:/app/vendor/usr/bin" 目录

您是如何做到的?如果二进制文件是存储库的一部分,则应该可以,但是,如果您手动添加了二进制文件(例如,通过/vendor/usr/bin),则会发现它在一定时间后消失了。这是由于Heroku的ephemeral filesystem

您需要在构建时加入heroku run bash。做到这一点的一种好方法是像adding a second buildpack这样的heroku-buildpack-apt,然后通过wdiff安装常规的wdiff软件包。

答案 1 :(得分:0)

我最终对Rails gem进行了硬编码,以在目录中找到可执行文件,而不是通过库路径