如何在带有 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何从在不同端口上运行的本地 AngularJS 应用程序向本地 Rails 应用程序发出请求?
Rails 4.2 强参数和解析 json put/update 上的更改属性