如何在带有 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?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4.2 从活动作业中获取延迟的作业 ID

如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?

Rails 4.2 强参数和解析 json put/update 上的更改属性

如何在 Rails 4.2 中为多对多关联创建表单

使用 Rails 4.2 和 lograge,如何在每个记录的行之前启用日期/时间?

如何在微控制器按钮上使while循环更快?