Module: Bj::Runner::ClassMethods

Defined in:
lib/bj/runner.rb

Instance Method Summary collapse

Instance Method Details

#backgroundObject



110
111
112
# File 'lib/bj/runner.rb', line 110

def background
  @background ||= Hash.new
end

#background=(value) ⇒ Object



114
115
116
# File 'lib/bj/runner.rb', line 114

def background= value
  @background ||= value 
end

#commandObject



118
119
120
121
122
123
124
125
126
127
128
# File 'lib/bj/runner.rb', line 118

def command
  "#{ Bj.ruby } " + %W[
    #{ Bj.script }
    run 
    --forever 
    --redirect=#{ log }
    --ppid=#{ Process.pid }
    --rails_env=#{ Bj.rails_env }
    --rails_root=#{ Bj.rails_root }
  ].map{|word| word.inspect}.join(" ")
end

#key(ppid = 0) ⇒ Object



95
96
97
98
# File 'lib/bj/runner.rb', line 95

def key ppid = 0
  ppid ||= 0
  "#{ Bj.rails_env }.#{ ppid }.pid"
end

#logObject



130
131
132
# File 'lib/bj/runner.rb', line 130

def log
  File.join logdir, "bj.#{ Bj.hostname }.#{ Bj.rails_env }.log"
end

#logdirObject



134
135
136
# File 'lib/bj/runner.rb', line 134

def logdir
  File.join File.expand_path(Bj.rails_root), 'log'
end

#no_tickle_keyObject



100
101
102
# File 'lib/bj/runner.rb', line 100

def no_tickle_key 
  "#{ Bj.rails_env }.no_tickle"
end

#pingObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/bj/runner.rb', line 65

def ping
  begin
    pid = nil
    uri = nil
    process = nil
    Bj.transaction do
      pid = Bj.config[Runner.key(Process.pid)] || Bj.config[Runner.key]
      uri = Bj.config["#{ pid }.uri"]
      process =
        if uri
          require "drb"
          # DRb.start_service "druby://localhost:0"
          DRbObject.new(nil, uri)
        else
          Process
        end
    end
    return nil unless pid
    pid = Integer pid
    begin
      process.kill Runner.hup_signal, pid
      pid
    rescue Exception => e
      false
    end
  rescue Exception => e
    false
  end
end

#run(options = {}, &block) ⇒ Object



138
139
140
# File 'lib/bj/runner.rb', line 138

def run options = {}, &block
  new(options, &block).run
end

#start(options = {}) ⇒ Object



104
105
106
107
108
# File 'lib/bj/runner.rb', line 104

def start options = {}
  options.to_options!
  background.delete Bj.rails_env if options[:force]
  background[Bj.rails_env] ||= Background.for(command)
end

#tickleObject



60
61
62
63
# File 'lib/bj/runner.rb', line 60

def tickle
  return nil if Bj.config[Runner.no_tickle_key]
  ping or start
end