У меня была такая же проблема, и я нашел решение.Сначала поместите ваш код в lib
dir (например, /lib/listener/init.rb
) и создайте один метод класса, который запускает EM, например Listener.run
.
#!/usr/bin/env ruby
require File.expand_path('../../config/environment', File.dirname(__FILE__))
class Listener
def self.run
# your code here
# you can access your models too
end
end
После этого я использовал dante драгоценный камень.Создайте /init/listener
файл.Код может быть таким:
#!/usr/bin/env ruby
require File.expand_path('../../lib/listener/init.rb', __FILE__)
log_file = File.expand_path('../../log/listener.stdout.log', __FILE__)
pid_file = File.expand_path('../../tmp/listener.pid', __FILE__)
listener = Dante::Runner.new('listener')
if ARGV[0] === 'start'
listener.execute(daemonize: true,
pid_path: pid_file,
log_path: log_file) { Listener.run }
elsif ARGV[0] === 'restart'
listener.execute(daemonize: true,
restart: true,
pid_path: pid_file,
log_path: log_file) { Listener.run }
elsif ARGV[0] === 'stop'
listener.execute(kill: true, pid_path: pid_file)
end
Теперь вы можете запустить свой код так: ./bin/listener start
, ./bin/listener restart
, ./bin/listener stop
Вы можете использовать бог для мониторинга вашего слушателя работает.Но убедитесь, что вы используете тот же файл pid (/tmp/listener.pid
).