我已经通过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
。
我究竟做错了什么?
我添加了
/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 buildpack像heroku-buildpack-apt
,然后通过你的wdiff
安装常规的Aptfile
包。
我最终硬编码我的rails gem来查找目录中的可执行文件,而不是通过LIBRARY PATH