我正在将 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 的设置LD_LIBRARY_PATH
方式对我来说似乎很干净,而 Python buildpack 做了一些 我不太明白原因的事情。
解决方案
无论如何,在使用手动覆盖库路径后,heroku config:set LD_LIBRARY_PATH=/app/.heroku/vendor/lib:vendor/ffmpeg/lib
我可以同时使用libmemcached
and ffmpeg
,但感觉不太健壮。如果其中一个 buildpacks 路径设置发生了变化,或者我添加了另一个 buildpack - 那么我将不得不手动编辑库路径变量。
更好的解决方案?
所以,虽然这根本不是一个紧迫的问题,但我只是想知道:
- 有没有更好的方法来解决这个问题?
- 可能我犯了一些导致路径冲突的配置错误吗?
- 这是否应该被视为任一构建包中的错误?