How to debug a rails (3.2) app started by foreman?

后端 未结 2 493
执笔经年
执笔经年 2020-12-14 03:01

I am trying to use foreman to start my rails app. Unfortunately I have difficulties connecting my IDE for debugging.

I read here about using

Debugge         


        
相关标签:
2条回答
  • 2020-12-14 03:19

    One approach is to require debugger normally in your gemfile, and add debugger normally in your code as needed. When the server hits that line, it will stop, but foreman won't be verbose about it. In your foreman console you can blindly type irb, and only then will you see a prompt appear. Bad UX, right?

    Another (augmentative) approach is to tail your logs:

    tail -f log/development.log
    

    Hope this helps.

    0 讨论(0)
  • 2020-12-14 03:28

    If you use several workers with full rails environment you could use the following initializer:

    # 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
    

    And in the foreman's logs you'll be able to find debugger's ports:

    $ foreman start
    12:48:42 web.1     | started with pid 29916
    12:48:42 worker.1  | started with pid 29921
    12:48:44 web.1     | I, [2012-10-30T12:48:44.810464 #29916]  INFO -- : listening on addr=0.0.0.0:5000 fd=10
    12:48:44 web.1     | I, [2012-10-30T12:48:44.810636 #29916]  INFO -- : Refreshing Gem list
    12:48:47 web.1     | Remote debugger on port 59269
    12:48:48 worker.1  | Remote debugger on port 41301
    

    Now run debugger using:

    rdebug -c -p [PORT]
    
    0 讨论(0)
提交回复
热议问题