2013-06-07 9 views
9

मुझे अपने साइडकीक कार्यकर्ता के अंदर मौजूदा सेल्युलॉइड अभिनेता तक पहुंचने की आवश्यकता है, लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है।साइडकीक वर्तमान सेल्युलॉइड अभिनेता

जब भी मैं फोन करने के लिए प्रयास करें:

Celluloid::Actor.new(SecureRandom.hex) 
: not in actor scope

मैं एक नया एक के साथ हर बार बनाने के द्वारा वर्तमान अभिनेता खोजने के आसपास पाने की कोशिश की:

Celluloid::Actor.current 

मैं कोई त्रुटि मिलती है

लेकिन किसी कारण से यह मुझे attempted to call dead actor की त्रुटि दे रहा था।

साइडकीक कार्यकर्ता के अंदर वर्तमान अभिनेता को पाने के लिए मुझे अलग-अलग क्या करना चाहिए?

पृष्ठभूमि जानकारी मैं अपने कार्यकर्ता में एक WebSocket से कनेक्ट कर रहा हूँ और इसे करने के लिए संदेश भेजने के।

Celluloid::WebSocket::Client.new('ws://my-uri', Celluloid::Actor.current)

+0

ब्राउज़ क्यों आपको लगता है कि मुझे क्या करना होगा? –

+0

अच्छा सवाल, मुझे नहीं लगता था कि यह प्रश्न के लिए प्रासंगिक था। लेकिन मैं अपने कार्यकर्ता में एक वेबसाकेट से कनेक्ट कर रहा हूं और इसे संदेश भेज रहा हूं। '@websocket_client || = सेलूलॉयड :: वेबसॉकेट :: क्लाइंट.न्यू ('ws: // my-uri', सेलूलॉयड :: अभिनेता.current)' – ardavis

+0

क्या आप वाकई श्रमिकों का उपयोग करना चाहते हैं? शायद आपको बस एक साधारण डेमॉन चाहिए? –

उत्तर

1

लगता आप सेलुलाइड सहित एक अलग वर्ग परिभाषित करना चाहिए, यहां one of those from Sidekiq repo

class MyWebSocketWhatever 
    include Celluloid 

    def initialize(url) 
    @ws_client = Celluloid::WebSocket::Client.new url, Celluloid::Actor.current 
    end 

    def send_message(msg) 
    @ws_client.text msg 
    end 

    def on_message(msg) 
    $redis.lpush 'sinkiq-example-messages', "RESPONSE: #{msg}" 
    end 
end 

class SinatraWorker 
    include Sidekiq::Worker 

    def perform(msg='lulz you forgot a msg!') 
    $redis.lpush 'sinkiq-example-messages', "SENT: #{msg}" 
    MyWebSocketWhatever.new('ws://echo.websocket.org').send_message msg 
    end 
end  

वर्क्स एक आकर्षण की तरह, यह के साथ खेल अभी-अभी समाप्त के आधार पर एक उदाहरण है। the full updated example जाओ, आवश्यक जवाहरात स्थापित करते हैं, तो शुरू दोनों सिनात्रा और Sidekiq

sidekiq -r ./sinkiq.rb 
ruby ./sinkiq.rb 

तो http://localhost:4567

संबंधित मुद्दे