防止python和ffmpeg heroku buildpacks覆盖LD_LIBRARY_PATH

时间:2014-03-02 16:14:22

标签: python heroku path ffmpeg libmemcached

我将一个Django应用程序部署到heroku,这需要ffmpeg。为实现此目的,我使用heroku-buildpack-multi安装heroku-buildpack-ffmpegheroku-buildpack-python,所有这些都可以。问题是我的应用程序还取决于django-pylibmc-saslpython-memcachedpylibmc等。按照惯例,heroku会感觉并自动为我安装libmemcached

这里有些事情有点不对劲。如果我删除自定义buildpack一切正常(显然除了ffmpeg)。但是,只要我将其添加进去,当我可以运行ffmpeg时,python就会在import pylibmc(或者更确切地说是模块本身内的import _pylibmc)上失败。在经历了一些令人头疼的问题之后,我决定看一下环境变量,这就是我得到的:

只启用了Python buildpack:

LD_LIBRARY_PATH=/app/.heroku/vendor/lib

启用了Python和ffmpeg构建包:

LD_LIBRARY_PATH=:vendor/ffmpeg/lib

看起来一个或两个构建包只是覆盖另一个,或者避免在已经设置的情况下设置变量。 ffmpeg buildpack似乎在a way that looks kosher to me中设置了LD_LIBRARY_PATH,而Python buildpack确实a few things我真的不明白它的原因。

解决方案

无论如何,在使用heroku config:set LD_LIBRARY_PATH=/app/.heroku/vendor/lib:vendor/ffmpeg/lib手动覆盖库路径后,我可以同时使用libmemcachedffmpeg,但它感觉不太强大。如果某个buildpacks路径设置发生了变化,或者我添加了另一个buildpack,那么我将不得不手动编辑库路径变量。

更好的解决方案?

所以,虽然这根本不是一个迫切的问题,但我只是想知道:

  • 有没有更好的方法来解决这个问题?
  • 我可能会在导致路径冲突时遇到一些配置错误吗?
  • 这应该被视为任何一个构建包中的错误吗?

1 个答案:

答案 0 :(得分:1)

通过快速浏览代码,这可能是heroku-buildpack-python的问题。查看您的~/.profileheroku run bash)并查看LD_LIBRARY_PATH的设置位置。我的猜测是你首先看到ffmpeg,然后看看Python的设置覆盖它。

如果是这种情况,你应该提交错误。