2

私は、起動を妨げる60秒間に何が起こっているのか、そしてこれに対する通常の原因を理解するための手順に興味があります。

これはログファイルがどのように見えるかです(実際に何が起こっていたかについては何も伝えません)

2013-01-14T10:34:17+00:00 app[web.1]: => Booting Thin
2013-01-14T10:34:17+00:00 app[web.1]: => Call with -d to detach
2013-01-14T10:34:17+00:00 app[web.1]: => Rails 3.2.2 application starting in production on http://0.0.0.0:52216
2013-01-14T10:34:17+00:00 app[web.1]: => Ctrl-C to shutdown server
2013-01-14T10:34:23+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2013-01-14T10:34:23+00:00 heroku[web.1]: Stopping process with SIGKILL
2013-01-14T10:34:24+00:00 heroku[web.1]: Process exited with status 137
2013-01-14T10:34:24+00:00 heroku[web.1]: State changed from starting to crashed

プロセスが強制終了されたときに、それが非常に役立つことを示すスタックトレースが少なくともあればと思います。

これが起こったときにあなたがする/チェックすることは何ですか?

PS:私は自分のケースに対する答えを探しているのではなく、誰もが恩恵を受けることができる一般的な手順を探しています。

4

2 に答える 2

9

私は通常、次のコード (initializers/debug_require.rb) を使用して、どの gem に時間がかかっているかを把握することから始めます。

if ENV['DEBUG_REQUIRE']
  require 'benchmark'

  def require(file)
    @@first ||= Time.now
    rc = false
    ts = Benchmark.measure do
      rc = super
    end
    if ENV['DEBUG_REQUIRE'].to_f < ts.total
      total = ts.format("%t require #{file}")
      from_start = (Time.now - @@first).to_i
      $stdout.puts "#{total} (#{from_start} second(s) from start)"
    end
    rc
  end
end

これを config/boot.rb に追加します:

require File.expand_path('../initializers/debug_require', __FILE__)

そしてセットheroku config:add DEBUG_REQUIRE=1

遅い要求のログ出力を監視します。

于 2013-02-18T22:39:29.780 に答える
0

何が起こっているのかを確認するために、ローカルで実行してみてはいかがでしょうか? この投稿で利用可能なコードを使用してそれを行うことができます: http://ablogaboutcode.com/2012/05/03/benchmark-your-bundle/

Heroku App Boot Timeoutのディスカッションで説明されているように、必要な gem の数を確認し、最初に調整する必要があります。ブート ロードに 60 秒以上かかる場合は、この gem を参照することもできます: https://github.com/dblock/heroku-forward

于 2013-01-15T17:38:39.023 に答える