如何调试自定义Heroku buildpack:未驱动发布脚本
我正在开发Eclipse,但当我与Heroku一起尝试并按下a键时,检测失败:如何调试自定义Heroku buildpack:未驱动发布脚本,heroku,eclipse-virgo,buildpack,Heroku,Eclipse Virgo,Buildpack,我正在开发Eclipse,但当我与Heroku一起尝试并按下a键时,检测失败: -----> Fetching custom git buildpack... done ! Heroku push rejected, no Cedar-supported app detected buildpack的detect脚本在应用程序的根目录中本地运行良好: $[...]virgo-buildpack/bin/detect . Virgo Web 有关于如何调试的提示吗?我尝试让det
-----> Fetching custom git buildpack... done
! Heroku push rejected, no Cedar-supported app detected
buildpack的detect脚本在应用程序的根目录中本地运行良好:
$[...]virgo-buildpack/bin/detect .
Virgo Web
有关于如何调试的提示吗?我尝试让detect脚本写入stdout和stderr,但输出没有显示在“heroku日志”下
我正在运行MacOSX10.8.2、Ruby 1.9.3p374和gems 1.8.23
更新:根据前两个答案,在驱动detect.rb脚本之前,我使用bash detect脚本安装了丢失的gem。我还将buildpack脚本更改为写入标准输出
heroku推进得更远,但仍然失败。我可以看到编译脚本正在退出,但是releasebash脚本在开始时有一个echo命令,而这不会出现在输出中
因此似乎没有调用发布脚本。
输出如下(#表示注释以避免混乱):
heroku日志——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
目前有一些工具可以使这变得更容易
使用内联构建包将构建包推送到平台上,这样您就可以获得良好的日志记录,并使用heroku run bash,这样您就可以在将要使用构建包的环境中对构建包进行修补。对于自定义构建包,
detect
脚本实际上不需要那么复杂,因为用户将使用BUILDPACK\u URL
手动指定它。复杂的detect
脚本实际上只对默认的Heroku buildpack有意义,因为它们需要检测buildpack是否适用于任何给定的应用程序
如果你想完全依靠检测,你可以这样做:
#!/usr/bin/env bash
# bin/detect <build-dir>
echo "Vergo"
exit 0
另外,说到简单性,看起来您的构建包是基于的,这是最复杂的构建包之一。您可能想看看简单bash中的大多数操作是如何完成的。这是一个有趣的想法,但当我推送这个微不足道的应用程序加上内联的buildpack时,我也会遇到同样的失败(Heroku推送被拒绝,没有检测到支持Cedar的应用程序)。这并不奇怪,因为heroku buildpack内联只是委托给内联的buildpack。然而,heroku run bash可能发现了一条有用的线索——当我克隆组合应用程序/内联构建包并尝试运行它时,Ruby抱怨没有安装nokogiri gem。当我安装它时,detect脚本运行得非常好。因此,我想我需要配置buildpack,以便heroku安装必要的gems。我更新了Gemfile和Gemfile.lock,以确保表达nokogiri依赖项,但在推送到heroku时仍然会出现相同的错误。一个令人困惑的问题是,环境变量PORT是在heroku run bash下设置的,但在推送到heroku驱动器detect/compile/release时,似乎没有设置为AFAICT。这是因为端口是在部署dynos时设置的,不是在slug编译步骤中。请注意,我需要坚持使用当前的Ruby实现进行XML解析,因为我想跟踪一个用Ruby编写的CloudFoundry buildpack,它是由它派生而来的。我在您的建议方面取得了相当大的进展。在调用detect.rb之前,我现在在bash detect脚本中安装缺少的gem。我已经在slug编译中获得了“失败释放代码”的经验。类似于
detect
的建议,尝试简化release
脚本(或将其全部删除)。它期待着类似的东西返回YAML。另外,在detect
中安装gems有点奇怪。由于它是一个定制的buildpack,在实践中可能并不重要,但是detect
应该非常快速,并且不会对底层系统进行任何更改。事实上,我认为甚至不能保证它将与compile
或release
运行在同一个系统上。不过,我仍然缺少任何能够看到不透明的“失败释放代码”背后的技术。我认为这将有利于所有buildpack编写器。通过写入标准输出,我可以看到编译脚本退出,但release bash脚本在开始时有一个echo命令,而这不会出现。因此,似乎没有人要求发布。
#!/usr/bin/env bash
# bin/detect <build-dir>
echo "Vergo"
exit 0
#!/usr/bin/env bash
# bin/detect <build-dir>
if [ -f $1/index.jsp ]; then
echo "Vergo" && exit 0
else
echo "no" && exit 1
fi