2017-10-13 98 views
0

我試圖運行使用PubNub Ruby SDK 4.0.25一個簡單的Ruby代碼,但運行ruby subscriber.rb當我接收日誌錯誤如下圖所示:PubNub紅寶石SDK:賽璐珞:: DeadActorError:嘗試調用的死演員:fetch_average

# 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 

我在2.4.1版本中使用Ruby(我也試過2.3.3,2.4.0,2.4.2),這就是我的Gemfile的樣子(我在4.0.23中試過pubnub gem版本太多):

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個月前運行此代碼時,它工作得很好。

回答

0

我已經聯繫了PubNub支持,結果發現在pubnub gem版本4.0.25中存在一個bug,它涉及到一項新功能 - 遙測。暫時降級到4.0.23解決了這個問題(使用Ruby 2.4.0)。