I’m using Rails 4.2. I start Rails using foreman, and I would like to attach a debugger when starting Rails. This question details the process for Rails 3.2 — How to debug a rails (3.2) app started by foreman?, however I believe this file is outdated
$ 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
Since I don’t think the “debugger” gem is supported by Rails 4.2. How would I start Rails using foreman on a dedicated debug port using Rails 4.2?
based on your comment, you said that you open to use byebug so this is the guide to set it up for Foreman
edit 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)
let say you would like to debug your controller
def index
@posts = Post.all
end
and you want to see @posts value
then just add byebug after the @posts
def index
@posts = Post.all
byebug
end
and do request to your #index endpoint
rails server will be paused on byebug line
you need to execute byebug -R localhost:8899 in another terminal
if you see this one https://github.com/deivid-rodriguez/byebug/blob/master/lib/byebug/remote/server.rb#L30 . it uses TCPServer too. so it's similar to your own implementation.
your foreman setting can read ENV['DEBUGGER_PORT'] too
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With