1

我正在将 Django 应用程序部署到 heroku,这需要 ffmpeg。为了实现这一点,我使用heroku-buildpack-multi来安装heroku-buildpack-ffmpegheroku-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我可以同时使用libmemcachedand ffmpeg,但感觉不太健壮。如果其中一个 buildpacks 路径设置发生了变化,或者我添加了另一个 buildpack - 那么我将不得不手动编辑库路径变量。

更好的解决方案?

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

  • 有没有更好的方法来解决这个问题?
  • 可能我犯了一些导致路径冲突的配置错误吗?
  • 这是否应该被视为任一构建包中的错误?
4

1 回答 1

1

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

如果是这种情况,您应该提交一个错误。

于 2014-03-03T08:22:34.207 回答