我正在开发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
答案 0 :(得分:2)
对于自定义构建包,detect
脚本实际上并不需要那么复杂,因为用户无论如何都会使用BUILDPACK_URL
手动指定它。复杂的detect
脚本实际上只对默认的Heroku构建包有意义,因为它们需要检测buildpack是否适用于任何给定的应用程序。
如果你想彻底检测,你可以逃避这样的事情:
#!/usr/bin/env bash
# bin/detect <build-dir>
echo "Vergo"
exit 0
一旦您完成了工作(并解决了compile
和release
)的任何问题,您就可以让它更加智能化。例如,您可以检测是否存在某种文件模式:
#!/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有一些工具可以让这更容易。
此构建包https://github.com/kr/heroku-buildpack-inline(帮助构建buildpack的构建包)
heroku run bash
是你最好的朋友。
使用内联buildpack将您的构建包推送到平台,以便您可以获得良好的日志记录,并使用heroku run bash
,以便您可以在您将使用它的环境中对您的buildpack进行逐步修补。