在Heroku应用程序上安装makefile

时间:2017-03-14 16:52:11

标签: heroku

我在Heroku上运行了一个Rails应用程序。我的应用程序调用通过Makefile安装的CLI工具(在我的本地计算机上)。我需要在我的Heroku应用程序上安装这个Makefile,以便它可用于我的所有应用程序实例。

如何让heroku在部署时安装此makefile?我可以在CircleCI上通过在配置文件中传递一些预部署参数来实现这一点:

cd vendor/liblouis ; ./configure ; make ; sudo make install

Heroku是否提供类似的东西? 我伸出了他们的支持,但他们给我指了一些makefile的buildpack。这不起作用(我认为),因为它不允许我运行./configure

2 个答案:

答案 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上的所有应用程序实例上使用。