我将一个Django应用程序部署到heroku,这需要ffmpeg。为实现此目的,我使用heroku-buildpack-multi安装heroku-buildpack-ffmpeg和heroku-buildpack-python,所有这些都可以。问题是我的应用程序还取决于django-pylibmc-sasl
,python-memcached
,pylibmc
等。按照惯例,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
手动覆盖库路径后,我可以同时使用libmemcached
和ffmpeg
,但它感觉不太强大。如果某个buildpacks路径设置发生了变化,或者我添加了另一个buildpack,那么我将不得不手动编辑库路径变量。
所以,虽然这根本不是一个迫切的问题,但我只是想知道:
答案 0 :(得分:1)
通过快速浏览代码,这可能是heroku-buildpack-python
的问题。查看您的~/.profile
(heroku run bash
)并查看LD_LIBRARY_PATH
的设置位置。我的猜测是你首先看到ffmpeg
,然后看看Python的设置覆盖它。
如果是这种情况,你应该提交错误。