Скрипт Ruby Daemon запускается только один раз - PullRequest
0 голосов
/ 05 января 2011

Я написал скрипт чтения RFC NFC и демонизировал его с помощью гема демонов.Все отлично работает, за исключением того, что скрипт запускается только один раз ...

Daemon.rb

require 'rubygems'
require 'daemons'

pwd  = File.dirname(File.expand_path(__FILE__))
file = pwd + '/touchatag.rb'

Daemons.run_proc(
  'touchatag_project_daemon', # name of daemon
  :dir_mode => :normal,
  :dir => File.join(pwd, 'tmp/pids'), # directory where pid file will be stored
  :backtrace => true,
  :monitor => true,
  :log_output => true
) do
  exec "ruby #{file}"
end

touchatag.rb

quire 'rubygems'
require 'nfc'
require 'httparty'

class TagAssociator
  include HTTParty
  base_uri 'localhost:3000'
end

NFC.instance.find do |tag|
  puts "Processing tag..."
  TagAssociator.post('/answers/answer', :query => {:uid => tag.uid})
end

Это прекрасно работает, и яполучать tag.uid в моем приложении.Но когда я сканирую другой RFID-тег, скрипт не запустится снова ...

Кто-нибудь знает, как настроить скрипт, который запускается "навсегда" и останавливается, когда демон останавливается?

Спасибо

ОБНОВЛЕНИЕ

я обновил свой скрипт daemon.rb:

require 'rubygems'
require 'daemons'

options = {
  :app_name   => "touchatag_project_daemon",
  :ARGV       => ['start', '-f', '--', 'param_for_myscript'],
  :dir_mode   => :script,
  :dir        => 'tmp/pids',
  :multiple   => true,
  :ontop      => true,
  # :mode       => :exec,
  :backtrace  => true,
  :monitor    => true
}

Daemons.run(File.join(File.dirname(__FILE__), '/touchatag.rb'), options)

Но он запускается один раз ... У меня нет других предложений?

1 Ответ

1 голос
/ 05 января 2011

Вы почти наверняка хотите использовать Daemon.run. run_proc было бы полезно, если вы хотите переместить код из touchtag.rb в Daemon.rb.

http://daemons.rubyforge.org/classes/Daemons.html#M000004

...