Pregunta

He escrito un guión lector de NFC y rubí daemonised con la gema demonios. Todo funciona muy bien, excepto el script sólo se ejecuta una vez ...

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

Esto funciona muy bien y estoy recibiendo el tag.uid en mi aplicación. Pero cuando se escanee una nueva etiqueta RFID la secuencia de comandos no funcionarán de nuevo ...

¿Alguien sabe cómo ajustar la secuencia de comandos que se ejecuta "para siempre" y se detiene cuando se detiene el demonio?

Gracias

Actualizar

He actualizado mi guión 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)

Sin embargo, sólo se ejecuta una vez ... yo no entiendo alguna otra sugerencia?

¿Fue útil?

Solución

casi seguro que quiere ser el uso de Daemon.run. run_proc sería útil si desea mover el código de touchtag.rb en Daemon.rb.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top