3

私は Eclipse Virgo ビルドパックを開発していますが、Heroku で試して簡単なアプリをプッシュすると、検出に失敗します:

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

ビルドパックの検出スクリプトは、アプリのルート ディレクトリでローカルに正常に動作します。

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

これをデバッグする方法に関するヒントはありますか? 検出スクリプトで stdout と stderr に書き込みを試みましたが、出力が「heroku ログ」に表示されません。

Mac OS X 10.8.2、Ruby 1.9.3p374、gems 1.8.23 を実行しています。

更新: 最初の 2 つの回答に続いて、detect.rb スクリプトを実行する前に、bash 検出スクリプトを使用して不足している gem をインストールしました。また、標準出力に書き込むようにビルドパック スクリプトを変更しました。

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 ログ --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
4

2 に答える 2

2

カスタム ビルドパックの場合、detectスクリプトをそれほど複雑にする必要はありませんBUILDPACK_URL。洗練されたdetectスクリプトは、特定のアプリにビルドパックが適用されるかどうかを検出する必要があるため、デフォルトの Heroku ビルドパックに対してのみ意味があります。

検出を完全にパントしたい場合は、次のような方法で回避できます。

#!/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に基づいてビルドパックを作成しているように見えますが、これは最も複雑なものの 1 つです。サードパーティのビルドパックのリストを見て、ほとんどが単純な bash でどのように行われるかを確認することをお勧めします。

于 2013-03-05T05:04:51.963 に答える
1

現在、これをより簡単にするためのツールがいくつかあります。

  1. このビルドパックhttps://github.com/kr/heroku-buildpack-inline (ビルドパックの構築を支援するビルドパック)

  2. heroku run bashあなたの親友であります。

インライン ビルドパックを使用してビルド パックをプラットフォームにプッシュし、良好なログを取得できるようにし、使用heroku run bashする環境で実際にビルドパックをいじることができるようにします。

于 2013-03-01T20:16:48.117 に答える