Domanda

Ho scritto uno script reader rubino NFC e daemonised con la gemma demoni. Tutto funziona benissimo tranne lo script viene eseguito solo una volta ...

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

Questa grande opera e sto ricevendo il tag.uid nella mia app. Ma quando la scansione di un altro tag RFID lo script wont eseguito di nuovo ...

Qualcuno sa come regolare lo script che viene eseguito "per sempre" e si ferma quando il demone viene arrestato?

Grazie

UPDATE

ho aggiornato il mio script 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)

Ma funziona solo una volta ... io non capisco altri suggerimenti?

È stato utile?

Soluzione

È quasi certamente vuole essere utilizzando Daemon.run. run_proc sarebbe utile se si vuole spostare il codice da touchtag.rb in Daemon.rb.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top