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 回答