PubNub Ruby SDK: Celluloid::DeadActorError: попытка вызова мертвого актера: fetch_average

Я пытаюсь запустить простой код Ruby, используя PubNub Ruby SDK 4.0.25, но при запуске ruby subscriber.rb я получаю в журналах ошибку, показанную ниже:

# Logfile created on 2017-10-14 01:09:02 +0200 by logger.rb/56815
D, [2017-10-14T01:09:02.580516 #1990] DEBUG -- Pubnub::Telementry: Initialized Telemetry
D, [2017-10-14T01:09:02.580628 #1990] DEBUG -- Pubnub::Client: Created new Pubnub::Client instance. Version: 4.0.25
D, [2017-10-14T01:09:02.581081 #1990] DEBUG -- Pubnub::Event: Initialized Pubnub::Subscribe
D, [2017-10-14T01:09:02.581125 #1990] DEBUG -- Pubnub::Client: Apply state
D, [2017-10-14T01:09:02.581443 #1990] DEBUG -- Pubnub::Subscriber: Adding subscription to Subscriber
D, [2017-10-14T01:09:02.582156 #1990] DEBUG -- Pubnub::Subscriber: Added subscription to Subscriber
D, [2017-10-14T01:09:02.582521 #1990] DEBUG -- Pubnub::Event: Initialized Pubnub::Subscribe
D, [2017-10-14T01:09:02.582557 #1990] DEBUG -- Pubnub::Client: Apply state
D, [2017-10-14T01:09:02.582862 #1990] DEBUG -- Pubnub::Subscriber: Starting subscription
D, [2017-10-14T01:09:02.583102 #1990] DEBUG -- Pubnub: Fired event Pubnub::Subscribe
D, [2017-10-14T01:09:02.583131 #1990] DEBUG -- Pubnub: #send_request start
D, [2017-10-14T01:09:02.583147 #1990] DEBUG -- Pubnub: #request_dispatcher
D, [2017-10-14T01:09:02.583176 #1990] DEBUG -- Pubnub::Client: Looking for requester for async subscribe_event
D, [2017-10-14T01:09:02.583670 #1990] DEBUG -- Pubnub::Event: Requested URI: http://ps.pndsn.com/v2/subscribe/sub-c-3b21e31a-a94f-11e7-80f2-f610152a0f4c/test_789/0?pnsdk=PubNub-Ruby%2F4.0.25&t=%7B%22r%22%3A0%2C%22t%22%3A0%7D&uuid=f568bd89-01c7-460f-a914-fe2d61116aca
D, [2017-10-14T01:09:03.060193 #1990] DEBUG -- Pubnub: Fire before fire_callback
E, [2017-10-14T01:09:03.060408 #1990] ERROR -- : Actor crashed!
Celluloid::DeadActorError: attempted to call a dead actor: fetch_average
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/proxy/sync.rb:9:in `method_missing'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/client.rb:310:in `telemetry_for'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/event.rb:76:in `uri'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/subscribe_event.rb:38:in `fire'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:28:in `public_send'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:28:in `dispatch'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/call/sync.rb:16:in `dispatch'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:50:in `block in dispatch'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:76:in `block in task'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/actor.rb:339:in `block in task'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/task.rb:44:in `block in initialize'
  /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/task/fibered.rb:14:in `block in create'

Вот так выглядит файл subscriber.rb:

require_relative 'client'

Client.new.pubnub.subscribe(
    channel: 'test_channel'
)

где client.rb:

require 'pubnub'

class Client
  attr_reader :pubnub

  def initialize
    @pubnub = Pubnub.new(
      publish_key: 'pub-c-some_proper_pub_key',
      subscribe_key: 'sub-c-some_proper_sub_key'
    )

    setup_listener
  end

  def setup_listener
    callback = Pubnub::SubscribeCallback.new(
      message:  ->(envelope) {
          puts "MESSAGE: #{envelope.result[:data]}"
      }
    )

    pubnub.add_listener(callback: callback)
  end
end

Я использую Ruby в версии 2.4.1 (я также пробовал 2.3.3, 2.4.0, 2.4.2), и вот как выглядит мой Gemfile (я также пробовал pubnub gem в версии 4.0.23) :

source 'https://rubygems.org' do
  gem 'pubnub', '~> 4.0.25'
end

И Gemfile.lock:

GEM
  remote: https://rubygems.org/
  specs:
    celluloid (0.17.3)
      celluloid-essentials
      celluloid-extras
      celluloid-fsm
      celluloid-pool
      celluloid-supervision
      timers (>= 4.1.1)
    celluloid-essentials (0.20.5)
      timers (>= 4.1.1)
    celluloid-extras (0.20.5)
      timers (>= 4.1.1)
    celluloid-fsm (0.20.5)
      timers (>= 4.1.1)
    celluloid-pool (0.20.5)
      timers (>= 4.1.1)
    celluloid-supervision (0.20.6)
      timers (>= 4.1.1)
    coderay (1.1.2)
    concurrent-ruby (1.0.5)
    dry-configurable (0.7.0)
      concurrent-ruby (~> 1.0)
    dry-container (0.6.0)
      concurrent-ruby (~> 1.0)
      dry-configurable (~> 0.1, >= 0.1.3)
    dry-core (0.3.4)
      concurrent-ruby (~> 1.0)
    dry-equalizer (0.2.0)
    dry-logic (0.4.2)
      dry-container (~> 0.2, >= 0.2.6)
      dry-core (~> 0.2)
      dry-equalizer (~> 0.2)
    dry-types (0.12.1)
      concurrent-ruby (~> 1.0)
      dry-configurable (~> 0.1)
      dry-container (~> 0.3)
      dry-core (~> 0.2, >= 0.2.1)
      dry-equalizer (~> 0.2)
      dry-logic (~> 0.4, >= 0.4.2)
      inflecto (~> 0.0.0, >= 0.0.2)
    dry-validation (0.11.1)
      concurrent-ruby (~> 1.0)
      dry-configurable (~> 0.1, >= 0.1.3)
      dry-core (~> 0.2, >= 0.2.1)
      dry-equalizer (~> 0.2)
      dry-logic (~> 0.4, >= 0.4.0)
      dry-types (~> 0.12.0)
    hitimes (1.2.6)
    httpclient (2.8.3)
    inflecto (0.0.2)
    json (2.1.0)
    method_source (0.9.0)
    pry (0.11.1)
      coderay (~> 1.1.0)
      method_source (~> 0.9.0)
    pubnub (4.0.25)
      celluloid (~> 0.17)
      dry-validation (~> 0.10)
      httpclient (~> 2.8, >= 2.8.3)
      json (>= 1.8, < 3)
    timers (4.1.2)
      hitimes

PLATFORMS
  ruby

DEPENDENCIES
  pry!
  pubnub (~> 4.0.25)!

BUNDLED WITH
   1.15.4

Это publisher.rb файл:

require_relative 'client'

Client.new.pubnub.publish(
    channel: 'test_channel',
    message: { text: "Hi! Message from PUBLISHER! #{Time.now}" }
) do |envelope|
    puts envelope.status
end

И вывод из publisher.rb дает такую ​​трассировку журнала:

    D, [2017-10-14T01:22:08.125841 #3009] DEBUG -- Pubnub::Telementry: Initialized Telemetry
    D, [2017-10-14T01:22:08.126657 #3009] DEBUG -- Pubnub::Client: Created new Pubnub::Client instance. Version: 4.0.25
    D, [2017-10-14T01:22:08.127096 #3009] DEBUG -- Pubnub::Event: Initialized Pubnub::Publish
    D, [2017-10-14T01:22:08.127401 #3009] DEBUG -- Pubnub::Publish: Fired event Pubnub::Publish
    D, [2017-10-14T01:22:08.127430 #3009] DEBUG -- Pubnub::Event: #send_request called
    D, [2017-10-14T01:22:08.127446 #3009] DEBUG -- Pubnub::SingleEvent: #request_dispatcher called
    D, [2017-10-14T01:22:08.127463 #3009] DEBUG -- Pubnub::Client: Looking for requester for async single_event
    D, [2017-10-14T01:22:08.127646 #3009] DEBUG -- Pubnub::Event: #send_request got sender
    D, [2017-10-14T01:22:08.128004 #3009] DEBUG -- Pubnub::Event: Requested URI: http://ps.pndsn.com/publish/pub-c-4f29acc4-caaf-4037-8bf5-5a93361121d8/sub-c-3b21e31a-a94f-11e7-80f2-f610152a0f4c/0/test_789/0/%7B%22text%22%3A%22Hi%21%20Message%20from%20PUBLISHER%21%20%28%E2%95%AD%E2%98%9E%E2%96%A0%E2%88%80%E2%96%A0%29%E2%95%AD%E2%98%9E%202017-10-14%2001%3A22%3A08%20%2B0200%22%7D?ortt=%7B%22t%22%3A15079369281271240%7D&pnsdk=PubNub-Ruby%2F4.0.25&seqn=1&uuid=5d73c0c5-5977-4d4c-8373-b6d8b8cee80a
    D, [2017-10-14T01:22:08.450584 #3009] DEBUG -- Pubnub::Event: Event#handle
    E, [2017-10-14T01:22:08.451594 #3009] ERROR -- : Actor crashed!
    NoMethodError: undefined method `body' for #<Celluloid::DeadActorError:0x007faf8e0c12b0>
        /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/event/formatter.rb:11:in `format_envelopes'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/event.rb:129:in `handle'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/pubnub-4.0.25/lib/pubnub/events/publish.rb:36:in `fire'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:28:in `public_send'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/calls.rb:28:in `dispatch'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/call/sync.rb:16:in `dispatch'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:50:in `block in dispatch'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/cell.rb:76:in `block in task'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/actor.rb:339:in `block in task'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/task.rb:44:in `block in initialize'
        /Users/user/.rvm/gems/ruby-2.4.1/gems/celluloid-0.17.3/lib/celluloid/task/fibered.rb:14:in `block in create'

Я не могу решить эту проблему с Celluloid::DeadActorError, и я надеюсь, что кто-нибудь подскажет, как с этим справиться. Что интересно, когда я запускал этот код 2 месяца назад, он работал просто отлично.


person dawlib    schedule 13.10.2017    source источник


Ответы (1)


Я связался со службой поддержки PubNub, и выяснилось, что в pubnub gem версии 4.0.25 есть ошибка, связанная с новой функцией — телеметрией. На данный момент переход на 4.0.23 решает проблему (используя Ruby 2.4.0).

person dawlib    schedule 18.10.2017