我在Heroku上运行了一个Rails应用程序。我的应用程序调用通过Makefile安装的CLI工具(在我的本地计算机上)。我需要在我的Heroku应用程序上安装这个Makefile,以便它可用于我的所有应用程序实例。
如何让heroku在部署时安装此makefile?我可以在CircleCI上通过在配置文件中传递一些预部署参数来实现这一点:
cd vendor/liblouis ; ./configure ; make ; sudo make install
Heroku是否提供类似的东西? 我伸出了他们的支持,但他们给我指了一些makefile的buildpack。这不起作用(我认为),因为它不允许我运行./configure
答案 0 :(得分:1)
我认为这是可行的,但需要一些工作,很难给你直截了当的解决方案。你应该使用buildpack并在构建阶段编译所有内容。我找到了this buildpack。我不知道这是否是推荐的,但它可以是一个很好的起点。
确实它不会运行selected.png
,但你可以实际分叉并以你想要的方式修改它。您只需要聪明地配置所有路径。在configure
或类似的东西中安装将无效。您也应该使用/usr/bin
代替make install
。
在这个buildpack中你可以访问3个目录:build,cache和env。您需要在构建目录中安装可执行文件或库。
我相信你可以在修改这个buildpack之前练习一次性dyno。只需运行sudo make install
并尝试编译Makefile。
答案 1 :(得分:0)
所以我能够使这个工作,但必须创建我自己的自定义buildpack。 Buildpacks比我想象的要简单得多,但我分叉了一个现有的并编辑它以适应我的情况。我将我的makefile存储在我的应用程序的vendor
目录中。
在buildpack中,我有以下代码:
#!/usr/bin/env bash
# bin/compile <build-dir> <cache-dir>
set -e
set -o pipefail
BUILD_DIR=$1
CACHE_DIR=$2
function indent() {
c='s/^/ /'
case $(uname) in
Darwin) sed -l "$c";;
*) sed -u "$c";;
esac
}
cd $BUILD_DIR/vendor/liblouis
# autoreconfig
echo "-----> Running autoreconfig"
autoreconf -f -i 2>&1 | indent
# configure
if [ -f configure ]; then
echo "-----> Configuring"
./configure --prefix=$BUILD_DIR/vendor/liblouis-exec 2>&1 | indent
fi
# make
echo "-----> Compiling with Make"
make 2>&1 | indent
# make install
echo "-----> Installing with Make"
make install 2>&1 | indent
我将buildpack推送到我自己的repo,然后将buildpack添加到我的heroku应用程序中
heroku buildpacks:add https://github.com/KidA001/heroku-buildpack-c
我还必须在我的应用程序的根目录中创建一个.profile
文件添加一个链接到一个需要链接到共享库的文件
<强>的.profile 强>
export LD_LIBRARY_PATH=$HOME/vendor/liblouis-exec/lib
现在我可以调用此buildpack中安装的这个CLI工具,它可以在heroku上的所有应用程序实例上使用。