В настоящее время у меня есть приложение 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';
});
Сообщение об ошибке в консоли: