在分配这个Heroku buildpack之后(对于phantomjs,但我想这个问题适用于其他自定义构建包):
https://github.com/stomita/heroku-buildpack-phantomjs
并更新编译脚本以从自定义的phantomjs tar.bz2文件中取出,该文件的bin / phantomjs二进制文件被替换为此文件:
http://arunoda.me/blog/phantomjs-webfonts-build.html
Heroku构建过程正常工作,提取正确的修改后的二进制文件,但在将其栅格化为网页后,会出现错误消息(通过heroku日志,sans时间戳简洁):
app[web.1]: phantomjs: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by phantomjs)
app[web.1]: phantomjs: /lib/libc.so.6: version `GLIBC_2.15' not found (required by phantomjs)
app[web.1]: phantomjs: /lib/libc.so.6: version `GLIBC_2.14' not found (required by phantomjs)
我尝试在tar.bz2文件中以各种配置(在不同的/ lib或/ usr / lib位置)中简单地包含这些文件,但这并没有奏效。我意识到有可能不得不在buildpack中的编译脚本中添加一些额外的路径信息,但也许是因为我不是一个Ops人,我不太明白。添加对buildpacks的研究和引用base / app目录的人员以及有供应商目录的编译脚本,我更加困惑。
我认为这是可以解决的:事实上,似乎Deepsy通过陈述&#34来解决问题here然后我从/ usr / lib复制了libstdc ++。so.6 /x86_64-linux-gnu/libstdc++.so.6并将其添加到我的自定义buildpack中,现在它的工作完美无缺:)"
对于我来说,问题就像这篇文章的大部分内容所指出的那样,我不知道这一行所包含的内容,并且非常感谢任何帮助。我花了太多时间在这上面,而且我真的被卡住了。
提前致谢。
更新1:
我在他的github repo here中找到了Deepsy的代码,并尝试做同样的curl方法,同时更新LD_LIBRARY_PATH变量和chmod 777文件夹的内容(包括两个二进制文件)和库文件)。这不起作用(出现相同的错误消息)。另外,我的二进制文件需要libc.so.6,但他没有,但我从我的操作系统中获取了该文件。
有趣的是:当尝试将libc.so.6库文件添加到LD_LIBRARY_PATH中时,我的Heroku应用程序崩溃了。我怀疑这可能是将该库添加到LD_LIBRARY_PATH可能会混淆Heroku中的其他二进制文件并使用我的版本,无论出于何种原因它都不适用于Heroku实例。
更新2:
我也尝试从头开始构建phantomjs二进制文件并且成功了。事实证明,我从顶部的第二个链接获得完全相同大小的二进制文件,并且相同的调用necesarry库(因此相同的错误)。
当前论文:
可能是phantomjs二进制文件在更新1中看到了正确的lib文件,但是提供的Heroku文件不是最新的,二进制文件可以正确运行。或者它仍然可能缺少库文件。
无论哪种方式,我想我需要以某种方式让phantomjs使用我提供的库文件,而且我不确定我是如何做到的。< / p>