我已经通过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
。
我在做什么错了?
答案 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
找到它。
操作系统应搜索 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进行了硬编码,以在目录中找到可执行文件,而不是通过库路径