2016-10-26 14 views
5

मैं एक नाखून कोडित php monstrosity को प्रतिस्थापित करने के लिए एक रेल ऐप को एकसाथ प्राप्त करने का प्रयास कर रहा हूं। वर्तमान अवतार एक गैर-रेल डीबी से डेटा खींच रहा है, इसे रेल डीबी में डाल रहा है और फिर इसे दृश्यों में प्रदर्शित कर रहा है। डीबी मुख्य रूप से तापमान रीडिंग के साथ आबादी है जो हर कुछ सेकंड में जोड़े जाते हैं। मैं बिना किसी समस्या के रेल में स्थिर-आईएसएच पृष्ठ प्रदर्शित कर सकता हूं, लेकिन एक्शनकेबल/रीयलटाइम डेटा जोड़ने की कोशिश करने से समस्याग्रस्त साबित हुआ है। ज्यादातर चीजें ठीक से काम कर रही प्रतीत होती हैं, लेकिन जब मैं अपने चैनल पर प्रसारित करता हूं, तो यह mychannel.coffee में प्राप्त फ़ंक्शन को हिट नहीं करता है।एक्शनकेबल ब्रॉडकास्ट प्राप्त नहीं किए गए जेएस फ़ंक्शन

मेरे सेटअप: सर्वर - यात्री (कार्यकारी यात्री शुरू बंडल) नौकरियां - Resque ActionCable - Redis

डाटा एक नौकरी कि कच्चे एसक्यूएल पकड़ लेता है और नए रिकॉर्ड बनाता द्वारा legacydb से आयात किया जाता। इसके बाद, एक और नौकरी चैनल के लिए प्रसारण।

समस्याएं एक्शनकेबल से आ रही हैं, मुझे लगता है। जेएस को ट्रिगर करने के लिए मुझे लगता है कि सभी उदाहरणों के लिए उपयोगकर्ता इनपुट की आवश्यकता है, ऐसा लगता है। हालांकि, मैं सर्वर की ओर से सख्ती से चीजों को ट्रिगर करने की कोशिश कर रहा हूं। यह काम:

class DatabroadcastJob < ApplicationJob 
    queue_as :default 
    self.queue_adapter = :resque 


    def perform 
    ActionCable.server.broadcast 'dashboard_channel', content: render_thedata 
    end 

    private 

    def render_thedata 
     dataArr =[Data1.last, Data2.last, Data3.last] 
     ApplicationController.renderer.render(partial: 
      'dashboard/data_tables', locals: {item: dataArr}) 
    end 

end 

काम करता है। यह काम करता हैं। मैं डैशबोर्ड_चैनल को मारने वाला प्रसारण देखता हूं। हालांकि, डैशबोर्ड.coffee में कुछ भी प्रसारण द्वारा ट्रिगर नहीं हो जाता है। यह अविश्वसनीय रूप से भ्रमित है।

Dashboard.coffee

App.dashboard = App.cable.subscriptions.create "DashboardChannel", 
     connected: -> 
    # Called when the subscription is ready for use on the server 

     disconnected: -> 
    # Called when the subscription has been terminated by the server 

     received: (data) -> 
     # Called when there's incoming data on the websocket for this channel 
     alert data['content'] 

कुछ नहीं होता। लॉग प्रसारण दिखाते हैं लेकिन कुछ भी dashboard.coffee हिट नहीं करता है और ब्राउज़र में एक चेतावनी उठाता है। क्या मैं इस चैट के सभी उदाहरणों के कारण गलत तरीके से सोच रहा हूं? क्या कोई और जगह है जहां मैं प्रसारण को पकड़ता हूं और ग्राहकों को धक्का देता हूं जब केवल सर्वर पक्ष बदलता है?

यदि इसे हल करने के लिए किसी अन्य जानकारी की आवश्यकता है, तो कृपया मुझे बताएं। यह मुद्दा अब मुझे मानसिक रूप से चला रहा है।

उत्तर

1

सबसे पहले, अपने फ्रेम जांचें। क्या आप वाकई संदेश प्राप्त कर रहे हैं?

enter image description here

बाद, अपने चैनल में आप अपने बाद के चरणों के लिए एक आईडी स्थापित करना चाहिए। यदि आपके पास एक मॉडल से संबंधित एक स्ट्रीम है, तो इस्तेमाल किया जाने वाला प्रसारण मॉडल और चैनल से उत्पन्न किया जा सकता है।

class DashboardChannel < ApplicationCable::Channel 
    def subscribed 
    post = Post.find(params[:id]) 
    stream_for post 
    end 
end 

तब तुम नहीं तो इतना

DashboardChannel.broadcast_to(@post, @comment)

तरह अपने चैनल पर प्रसारण कर सकते हैं, तो आपको निम्न करना चाहिए:

class DashboardChannel < ApplicationCable::Channel 
    def subscribed 
    stream_from 'dashboard_channel' 
    end 
end 

लेकिन इस बुरी प्रथा है, क्योंकि तुम जीता यह निर्धारित करने में सक्षम नहीं है कि कौन सा उपयोगकर्ता आपके सर्वर पर संचारित करता है।

+0

मार्गदर्शन के लिए धन्यवाद।मैं प्रसारण करने के लिए काम करने में सक्षम था लेकिन किसी कारण से, यह चेतावनी पॉप अप नहीं करना चाहता था। मेरे अंतिम उपयोग के मामले के लिए, मैंने आंशिक पुन: प्रस्तुत करने के लिए डैशबोर्ड नियंत्रक की कॉफ़ीस्क्रिप्ट में jQuery फ़ंक्शंस बनाना समाप्त कर दिया। मैं वहां भी समस्याओं में भाग गया क्योंकि मैं एक मूर्ख था और div विशेषता के लिए "आईडी" के बजाय "नाम" इस्तेमाल किया था। चीयर्स! – Scaylos

+2

एक बात जो मैं जोर देउंगा वह 'stream_for' और' stream_from' के बीच प्रमुख * अंतर * है। मुझे खोजने में थोड़ी देर लग गई। मैं 'stream_for' का उपयोग कर नामित स्ट्रीम पर प्रसारण कर रहा था और यह काम नहीं करता है, मुझे 'stream_from' की आवश्यकता है। इस पर ध्यान दें। –

0

एक चीज जो मैं समस्या निवारण और कॉफी/जावास्क्रिप्ट का परीक्षण करने के लिए जोड़ूंगा वह यह है कि console.log आपका मित्र है। console.log "First step complete" जोड़ना और वास्तव में वास्तव में ट्रैकडाउन करने में मदद मिली जहां त्रुटियां हो रही थीं।

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