Кабель Action и междоменная интеграция AngularJS

В настоящее время у меня есть приложение Rails 5, выступающее в качестве моего бэкэнда, мы можем назвать его «ядром». У меня также есть другое приложение Rails 5, выступающее в качестве моего внешнего интерфейса, которое обслуживает клиентскую часть AngularJS, мы можем назвать его «Фронт». Это два совершенно отдельных приложения Rails 5 с совершенно разными доменами.

По сути, я пытаюсь интегрировать Action Cable через Core и заставить его общаться с Front. Я использую этот сервис здесь для фронта: https://www.npmjs.com/package/angular-actioncable. Что касается Core, это просто базовая настройка Action Cable.

Проблема: у меня возникли проблемы с тем, чтобы рукопожатие работало в двух разных доменах. Я прочитал все, что смог найти в Интернете, к сожалению, информации не так много. Если вы делали это раньше, пожалуйста, помогите!

Примечание. У меня работает сервер Redis, и я использую отдельные порты для имитации отдельных доменов в разработке.

Основные:

chat_channel.rb

class ChatChannel < ApplicationCable::Channel
  def subscribed
    stream_from 'http://localhost:2000/#/chat'
  end

  def unsubscribed
    stop_all_streams
  end

  def receive(data)
    ActionCable.server.broadcast('http://localhost:2000/#/chat', data)
  end

  def speak
    params.fetch('data').fetch('chat')
  end
end

route.js

mount ActionCable.server => '/cable'  

кабель.yml

development:
  adapter: redis
  url: redis://localhost:6379

test:
  adapter: async

production:
  adapter: redis
  url: redis://localhost:6379

config/environments.rb

config.action_cable.disable_request_forgery_protection = true

Спереди:

ChatCtrl.js

app.controller('ChatCtrl', ['$scope', 'ActionCableChannel',
function($scope, ActionCableChannel) {

  $scope.inputText;
  $scope.chatData = [];

  var consumer = new ActionCableChannel("ChatChannel");
  var callback = function(message) {
    $scope.chatData.push(message);
  };

  consumer.subscribe(callback).then(function() {
    $scope.sendToMyChannel = function(message) {
      consumer.send(message, 'speak');
    };
    $scope.$on("$destroy", function() {
      consumer.unsubscribe().then(function() {
        $scope.sendToMyChannel = undefined;
      });
    });
  });

}
]);


// Action Cable Configuration
app.run(function (ActionCableConfig) {
  ActionCableConfig.wsUri = 'localhost:4000';
});

Сообщение об ошибке в консоли:

введите здесь описание изображения


person CarlsBad505    schedule 07.10.2016    source источник


Ответы (1)


Пытаться

ActionCableConfig.wsUri = 'ws://localhost:4000';
person hiehuehue    schedule 13.10.2016
comment
Спасибо, извините, что так долго не отвечал. Это сработало! - person CarlsBad505; 09.01.2018