如何在带有 Rails 4.2 的专用调试端口上使用工头启动 Rails?

Posted

技术标签:

【中文标题】如何在带有 Rails 4.2 的专用调试端口上使用工头启动 Rails?【英文标题】:How do I start Rails with foreman on a dedicated debug port with Rails 4.2? 【发布时间】:2021-11-23 11:54:39 【问题描述】:

我使用的是 Rails 4.2。我使用工头启动 Rails,我想在启动 Rails 时附加一个调试器。这个问题详细介绍了 Rails 3.2 的过程——How to debug a rails (3.2) app started by foreman?,但是我相信这个文件已经过时了

$ cat config/initializers/start_debugger.rb
# Enabled debugger with foreman, see https://github.com/ddollar/foreman/issues/58
if Rails.env.development?
  require 'debugger'
  Debugger.wait_connection = true

  def find_available_port
    server = TCPServer.new(nil, 0)
    server.addr[1]
  ensure
    server.close if server
  end

  port = find_available_port
  puts "Remote debugger on port #port"
  Debugger.start_remote(nil, port)
end

因为我不认为 Rails 4.2 支持“调试器”gem。如何在使用 Rails 4.2 的专用调试端口上使用工头启动 Rails?

【问题讨论】:

你试过byebug吗? github.com/deivid-rodriguez/byebug/blob/master/… 我对此持开放态度,但该链接没有说明我将如何集成它,以便我可以通过工头启动 Rails 并启用调试端口。通过工头启动 Rails 是我们项目的要求。 【参考方案1】:

根据您的评论,您说您开放使用 byebug 所以这是为工头设置它的指南

编辑 config/environments/development.rb

require "byebug/core"
port = ENV['DEBUGGER_PORT'] # any port that you like
Byebug.wait_connection = true
Byebug.start_server("localhost", port)

假设你想调试你的控制器

def index
  @posts = Post.all
end

并且您想查看@posts 值 然后在@posts之后添加byebug

def index
  @posts = Post.all
  byebug
end

并请求您的#index 端点 rails 服务器将在 byebug 行暂停 你需要在另一个终端执行byebug -R localhost:8899


如果你看到这个https://github.com/deivid-rodriguez/byebug/blob/master/lib/byebug/remote/server.rb#L30 。它也使用 TCPServer。所以它类似于你自己的实现。

您的工头设置也可以读取 ENV['DEBUGGER_PORT']

【讨论】:

谢谢,但这并没有告诉我在 Rails 以工头启动时如何公开调试端口。此外,我打算使用 VSCode 扩展进行调试,并且不希望专门将代码添加到 Rails 中进行调试,因为我了解 VS Code 将允许我直接在 IDE 中设置断点和调试 查看我更新的帖子

以上是关于如何在带有 Rails 4.2 的专用调试端口上使用工头启动 Rails?的主要内容,如果未能解决你的问题,请参考以下文章