如何调试自定义Heroku buildpack:释放脚本不被驱动

时间:2013-03-01 15:32:31

标签: heroku eclipse-virgo buildpack

我正在开发Eclipse Virgo buildpack,但是当我使用Heroku尝试并推送trivial app时,检测失败:

-----> Fetching custom git buildpack... done
!     Heroku push rejected, no Cedar-supported app detected

buildpack的detect脚本在app的根目录中本地工作正常:

$[...]virgo-buildpack/bin/detect .
Virgo Web

有关如何调试此问题的任何提示?我尝试将检测脚本写入stdout和stderr,但输出不会出现在“heroku logs”下。

我正在运行Mac OS X 10.8.2,Ruby 1.9.3p374和宝石1.8.23。

更新:在前两个答案之后,我使用bash检测脚本在驱动detect.rb脚本之前安装缺少的gem。我还更改了buildpack脚本以写入标准输出。

heroku推进得更进一步,但仍然失败。我可以看到编译脚本退出,但是发布bash脚本在开始时有一个echo命令,这不会出现在输出中。

所以似乎没有调用发布脚本。

输出如下(#表示注释以避免混乱):

-----> Fetching custom git buildpack... done
# detect script enter and exit
Virgo Web app detected
# compile script enter and exit
-----> Discovering process types
       Procfile declares types                                                                                                                                                                                                                                                                                                                                                                                             


                               -> (none)
# detect script enter and exit (again)
Virgo Web -> web

-----> Compiled slug size: 60.4MB
-----> Launching... !     Heroku push rejected, failure releasing code

heroku logs --tail只显示:

2013-03-06T10:53:48+00:00 heroku[slugc]: Slug compilation started
2013-03-06T10:54:27+00:00 heroku[slugc]: Slug compilation failed: failure releasing code

2 个答案:

答案 0 :(得分:2)

对于自定义构建包,detect脚本实际上并不需要那么复杂,因为用户无论如何都会使用BUILDPACK_URL手动指定它。复杂的detect脚本实际上只对默认的Heroku构建包有意义,因为它们需要检测buildpack是否适用于任何给定的应用程序。

如果你想彻底检测,你可以逃避这样的事情:

#!/usr/bin/env bash
# bin/detect <build-dir>

echo "Vergo"
exit 0

一旦您完成了工作(并解决了compilerelease)的任何问题,您就可以让它更加智能化。例如,您可以检测是否存在某种文件模式:

#!/usr/bin/env bash
# bin/detect <build-dir>
if [ -f $1/index.jsp ]; then
  echo "Vergo" && exit 0
else
  echo "no" && exit 1
fi

另外,谈到简单性,看起来你的构建包基于Ruby buildpack,这是最复杂的一个。您可能需要查看list of third-party buildpacks,了解大多数操作是如何在简单的bash中完成的。

答案 1 :(得分:1)

Currnetly有一些工具可以让这更容易。

  1. 此构建包https://github.com/kr/heroku-buildpack-inline(帮助构建buildpack的构建包)

  2. heroku run bash是你最好的朋友。

  3. 使用内联buildpack将您的构建包推送到平台,以便您可以获得良好的日志记录,并使用heroku run bash,以便您可以在您将使用它的环境中对您的buildpack进行逐步修补。