heroku 上的第三方库

Third party libraries on heroku

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

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

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

我做错了什么?

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

I have added /app/vendor/usr/bin as a LD_LIBRARY_PATH environment variable but my Ruby on Rails application cannot find wdiff

LD_LIBRARY_PATHtells the OS where to find libraries to be dynamically linked at runtime。例如,如果您是 运行 需要 OpenSSL 但不包含 OpenSSL 本身的应用程序,则操作系统可以通过 LD_LIBRARY_PATH.

找到它

OS 应该搜索 二进制文件 的目录列在 PATH 变量中。尝试改用它。

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

之类的东西
export PATH="$PATH:/app/vendor/usr/bin"

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

最后,Heroku 特有的东西:

and added the executable to my /vendor/usr/bin directory

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

您需要在构建时包含 wdiff。一个好的方法是 adding a second buildpack like heroku-buildpack-apt 然后通过 Aptfile.

安装常规 wdiff