Puma Rails 5 binding.pry仅在超时前60秒可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Puma Rails 5 binding.pry仅在超时前60秒可用相关的知识,希望对你有一定的参考价值。

当我使用binding.pry时,Puma超出了我的要求。在我的控制器中

def new
  require 'pry'
  binding.pry
end

然后我发出命令,命中控制器并进入pry会话。 60秒后彪马?超时我的请求,重启一个工人,然后通过调试会话爆炸。

[1] pry(#<Agent::ClientsController>)> [3522] ! Terminating timed out worker: 3566
[3522] - Worker 0 (pid: 4171) booted, phase: 0

如果重要的话,我用吊带生成了这个应用程序。如何在rails 5中扩展我的调试会话?

答案

这个怎么样?

# config/puma.rb    
...

environment ENV['RACK_ENV'] || 'development'

...

if ENV['RACK_ENV'] == 'development'
  worker_timeout 3600
end

编辑(Rails 5.1.5):

因为ENV ['RACK_ENV']是空的,所以我做了以下事情:

# config/puma.rb 

...

if ENV.fetch('RAILS_ENV') == 'development'
   puts "LOGGER: development => worker_timeout 3600"
   worker_timeout 3600
end
另一答案

您可以创建配置文件并在其中设置超时值(对于所有请求,而不仅仅是调试中涉及的请求)。我建议制作一个特定于dev的,并在本地运行服务器时引用它(而不是为生产设置一些大的超时值)。

在rails应用程序中,创建一个像/config/dev_puma_config.rb这样的文件并放入其中:

#!/usr/bin/env puma

worker_timeout 3600

然后,当您启动服务器时,使用-C引用该文件,如下所示:

bundle exec puma -t 1:1 -w 1 -p 3000 -e development -C config/dev_puma_config.rb

作为关于该worker_timeout设置的一些背景信息,这是puma配置所说的内容:

验证所有工作程序是否在给定超时内检入主进程。如果不是,则将重新启动工作进程。这不是请求超时,而是防止挂起或死机进程。设置此值不会防止请求缓慢。默认值为60秒。

以上是关于Puma Rails 5 binding.pry仅在超时前60秒可用的主要内容,如果未能解决你的问题,请参考以下文章

没有为 binding.pry 提供 REPL 的护栏

用pry阅读ruby源码--以task方法为例

javascript控制台的`binding.pry`?

markdown 在docker容器中运行binding.pry

使用 Nginx、Puma 和 Redis 部署 Rails 5 Action Cable

sh 'binding.pry'检查 - 预先提交git hook