在RubyMine中调试守护进程

时间:2014-05-27 06:20:25

标签: ruby debugging daemon

有没有办法在Ruby Mine中调试守护进程。我调用此文件的方式就像这样

Daemons.run(文件,选项)

其中file是文件的名称,options是我传递给文件的一堆选项。

1 个答案:

答案 0 :(得分:-1)

我也试图调试Rails守护进程(gem守护进程)。特别是ActiveMessaging轮询器脚本。但是由于各种原因(竞争条件等),ruby-debug-ide无法附加。

我想出的解决方案是使用gem rails-daemons。这适用于ActiveMessaging并允许我创建各种守护进程,更重要的是,能够在RubyMine中调试它们

解决方法

使用https://github.com/mirasrael/daemons-rails创建一个新守护程序。这适用于OSX 10.8.x上的RubyMine 6.3.3,Rails 4,Ruby 2.1.2

示例守护程序

mqpoller.rb(运行rails后生成守护进程mqpoller)

#!/usr/bin/env ruby

# You might want to change this
ENV["RAILS_ENV"] ||= "development"

root = File.expand_path(File.dirname(__FILE__))
root = File.dirname(root) until File.exists?(File.join(root, 'config'))
Dir.chdir(root)

require File.join(root, "config", "environment")

$running = true
Signal.trap("TERM") do 
  $running = false
end

while($running) do

    # Replace this with your code
    Rails.logger.auto_flushing = true
    Rails.logger.info "This daemon is still running at #{Time.now}.\n"

    # ADDED MY CODE BELOW HERE TO START ActiveMessaging

    Rails.logger = Logger.new(STDOUT)
    ActiveMessaging.logger = Rails.logger

    # Load ActiveMessaging
    ActiveMessaging::load_processors

    # Start it up!
    ActiveMessaging::start

    sleep 10
end