Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails 5 ActionCable App is not defined

I am new to ActionCable in Rails 5. I am trying to make a chat for my Rails app. When I try and send a test message through the console App.room.speak('Test!') but when I do I get an error.

Uncaught ReferenceError: App is not defined at :1:1

room.coffe

App.room = App.cable.subscriptions.create "RoomChannel",
  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
  $('message').append data

  speak: (message)->
  @perform 'speak', message: message

room_channel.rb

class RoomChannel < ApplicationCable::Channel
   def subscribed
     stream_from "room_channel"
   end

   def unsubscribed
      # Any cleanup needed when channel is unsubscribed
   end

   def speak (data)
     Message.new content: data['message'], user: current_user
   end
end

broadcast_message_job.rb

class BroadcastMessageJobJob < ApplicationJob
   queue_as :default

   def perform(meesage)
     ActionCable.server.broadcast 'room_channel', render_message(message)
   end

   private

   def render_message(message)
     ApplicationController.renderer.render message
   end
end

cable.js

(function() {
   this.App || (this.App = {});

   App.cable = ActionCable.createConsumer();

}).call(this);

routes.rb

mount ActionCable.server => '/cable'
like image 395
jrocc Avatar asked Oct 18 '22 10:10

jrocc


1 Answers

Make sure you've added the require_self in the cable.js file:

// app/assets/javascripts/cable.js
//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});
  App.cable = ActionCable.createConsumer();
}).call(this);

This will add the content from this same cable.js file, if you've defined the App in other file, then you'll need to add it in the "require" section.

like image 175
Sebastian Palma Avatar answered Oct 21 '22 03:10

Sebastian Palma