【发布时间】:2014-04-03 12:21:08
【问题描述】:
我正在将一个 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 - 那么我将不得不手动编辑库路径变量。
更好的解决方案?
所以,虽然这根本不是一个紧迫的问题,但我只是想知道:
- 有没有更好的方法来解决这个问题?
- 可能是我犯了一些配置错误导致路径冲突吗?
- 这是否应被视为任一构建包中的错误?
【问题讨论】:
-
问题报告here。
标签: python heroku path ffmpeg libmemcached