Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试自定义Heroku buildpack:未驱动发布脚本_Heroku_Eclipse Virgo_Buildpack - Fatal编程技术网

如何调试自定义Heroku buildpack:未驱动发布脚本

如何调试自定义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

我正在开发Eclipse,但当我与Heroku一起尝试并按下a键时,检测失败:

-----> 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是你最好的朋友


  • 使用内联构建包将构建包推送到平台上,这样您就可以获得良好的日志记录,并使用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