如何在远程进程(例如pow)中使用Byebug?

28

我如何连接到Byebug的远程调试实例(用于Pow等)?

3个回答

40

Joseph的回答很好,但在某些小方面仍然令人困惑。他把byebug服务器的启动放在config/environments/development.rb中,但将其放在初始化程序中会更好。此外,环境变量的导出应该放在.powenv.powrc中。这是我让它正常工作的方法。

在你的Gemfile中:

gem 'byebug'

在命令行上:

bundle install

如果您正在使用 Pow,请将以下内容添加到 .powenv 文件中:

export BYEBUGPORT=3001
如果您正在使用其他框架(例如仅使用foreman),则可能需要修改.env文件。
config/initializers/byebug.rb中。
if Rails.env.development? and ENV['BYEBUGPORT']
  require 'byebug/core'
  Byebug.start_server 'localhost', ENV['BYEBUGPORT'].to_i
end

最后,在命令行上执行:

touch tmp/restart.txt

当你访问你的Pow网站时,byebug服务器应该已经启动。现在你可以在命令行中执行以下操作:

[bundle exec] byebug -R localhost:3001

1
是的,按照说明操作,它就像魔法一样运行。谢谢尼古拉斯! - Patrick Reiner
1
请注意,根据应用服务器的不同,“touch tmp/restart.txt”可能是不必要的。对于生产中的Passenger,则需要此命令,而在任何应用服务器上进行开发时通常不需要。 - Noah Gibbs
非常好用,也可以与puma-dev一起使用。请使用~/.powconfig而不是.powenv进行全局配置。 - Manuel Meurer

33

为了完成上述任务,我不得不从几个不同的来源汇集信息,因此我想在这里提供一个合并的指南以方便参考:

以下是步骤:

  1. 在config/environments/development.rb中添加:

require 'byebug'

#set in your .powconfig
if ENV['RUBY_DEBUG_PORT']
  Byebug.start_server 'localhost', ENV['RUBY_DEBUG_PORT'].to_i
else
  Byebug.start_server 'localhost'
end
  • 重新启动Pow并访问yourapp.dev

  • 运行以下命令:

  • [bundle exec] byebug -R localhost:<port_you_defined_in_pow_config>
    
  • 您应该看到与远程实例的成功连接。

  • 2
    我正在使用 pow。我尝试了答案,但没有成功。我坐在终端上,看到 Connecting to byebug server localhost:12346. Connected.,我的代码中有很多 byebug 调用,但没有断点!我现在感到困惑 - 如果你有其他的想法,我愿意听取!否则,无论如何,谢谢你的帮助! - Andy Adams
    1
    注意:不要在Ruby 2.0或更高版本中使用Joseph提到的问题! - Noah Gibbs
    @Noah,你能详细解释一下吗? - Joseph Siefers
    @Noah,我现在明白你的意思了,谢谢澄清。虽然那个问题提到了rdebug,但它仍然适用于Ruby 2.0下的byebug。第一个回答清楚地解释了pow具有多个工作线程,并且远程调试器(在这种情况下是byebug)有可能连接到错误的线程(从而导致断点被错过)。 - Joseph Siefers
    2
    请注意,目前需要添加 require 'byebug/core' — 请参阅 https://github.com/deivid-rodriguez/byebug/issues/185#issuecomment-155256967 - Whatcould
    显示剩余3条评论

    8

    在你的代码中

    remote_byebug
    

    刷新页面以调用您的代码。这将在端口8989上启动本地byebug服务器。然后,您的代码将“挂起”,等待客户端连接。

    通过终端连接到它:

    byebug -R localhost:8989
    

    根据这个链接,手动配置服务器已经不再必要。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接