heroku上的第三方库

问题描述 投票:0回答:2

我已经通过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

我究竟做错了什么?

ruby-on-rails heroku vendor
2个回答
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找到它。

操作系统应搜索二进制文件的目录列在PATH变量中。尝试使用它。

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

export PATH="$PATH:/app/vendor/usr/bin"

如果存在多个具有相同名称的二进制文件,则路径中较早找到的二进制文件优先于稍后找到的二进制文件。

最后,Heroku特有的东西:

并将可执行文件添加到我的/vendor/usr/bin目录中

你是怎么做的?如果二进制文件是您的存储库的一部分,您应该没问题,但如果您手动添加它(例如通过heroku run bash),您会​​发现它在一定时间后消失。这是由于Heroku的ephemeral filesystem

你需要在构建时包含wdiff。这样做的一个好方法是adding a second buildpackheroku-buildpack-apt,然后通过你的wdiff安装常规的Aptfile包。


0
投票

我最终硬编码我的rails gem来查找目录中的可执行文件,而不是通过LIBRARY PATH

© www.soinside.com 2019 - 2024. All rights reserved.