2017-09-07 6 views
2

でのRedisからの退会:は優雅に私はRedisのチャネルをリッスンRubyプログラムを持って終了

module Listener 
    class << self 
    def listen 
     redis.subscribe "messaging" do |on| 
     on.message do |_, msg| 
      Notify.about(msg) 
     end 
     end 
    end 

    def redis 
     @redis ||= Redis.new(driver: :hiredis) 
    end 
    end 
end 

私は

kill -15 listener-pid 

で、私は、プロセスを再起動するアプリを展開しかしAirbrakeたびに私を通知しSignalException: SIGTERMについては、次のバックトレース付き

/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19 in read 
/gems/hiredis-0.6.1/lib/hiredis/ext/connection.rb:19 in read 
/gems/redis-3.3.3/lib/redis/connection/hiredis.rb:54 in read 
/gems/redis-3.3.3/lib/redis/client.rb:262 in block in read 
/gems/redis-3.3.3/lib/redis/client.rb:250 in io 
/gems/redis-3.3.3/lib/redis/client.rb:261 in read 
/gems/redis-3.3.3/lib/redis/client.rb:136 in block (3 levels) in call_loop 
/gems/redis-3.3.3/lib/redis/client.rb:135 in loop 
/gems/redis-3.3.3/lib/redis/client.rb:135 in block (2 levels) in call_loop 
/gems/redis-3.3.3/lib/redis/client.rb:231 in block (2 levels) in process 
/gems/redis-3.3.3/lib/redis/client.rb:367 in ensure_connected 
/gems/redis-3.3.3/lib/redis/client.rb:221 in block in process 
/gems/redis-3.3.3/lib/redis/client.rb:306 in logging 
/gems/redis-3.3.3/lib/redis/client.rb:220 in process 
/gems/redis-3.3.3/lib/redis/client.rb:134 in block in call_loop 
/gems/redis-3.3.3/lib/redis/client.rb:280 in with_socket_timeout 
/gems/redis-3.3.3/lib/redis/client.rb:133 in call_loop 
/gems/redis-3.3.3/lib/redis/subscribe.rb:43 in subscription 
/gems/redis-3.3.3/lib/redis/subscribe.rb:12 in subscribe 
/gems/redis-3.3.3/lib/redis.rb:2765 in _subscription 
/gems/redis-3.3.3/lib/redis.rb:2143 in block in subscribe 
/gems/redis-3.3.3/lib/redis.rb:58 in block in synchronize 
/usr/lib/ruby/2.4.0/monitor.rb:214 in mon_synchronize 
/gems/redis-3.3.3/lib/redis.rb:58 in synchronize 
/gems/redis-3.3.3/lib/redis.rb:2142 in subscribe 

SIGTERMエラーを受け取らないように、リスナープロセスを正常に再起動することは可能ですか?

答えて

0

私はtrap('SIGTERM') { exit }を追加した後、問題が

を固定し、今私のリスナクラスは次のようになりますredis-rb

pubsub例を見つけました:

module Listener 
    class << self 
    def listen 
     trap('SIGTERM') { exit } 

     redis.subscribe "messaging" do |on| 
     on.message do |_, msg| 
      Notify.about(msg) 
     end 
     end 
    end 

    def redis 
     @redis ||= Redis.new(driver: :hiredis) 
    end 
    end 
end 
関連する問題