Ruby script de demonio sólo se ejecuta una vez
-
25-09-2019 - |
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?
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
.