2014-11-16 2 views
2

Я использую RoR, Backbone, и у меня есть серверная функция, использующая sidekiq, поэтому моя база данных Redis обновляется в режиме реального времени. Мне нужно запустить мое базовое событие, когда sidekiq изменит атрибуты базы данных. Функция Sidekiq находится в каталоге app/assets/workers. Так что в основном мне нужно, чтобы из Rails /app/assets/workers/worker.rb я мог запускать свою коллекцию Backbone в app/assets/javascripts/backbone/models/monster.js.coffee в режиме реального времени. Когда sidekiq обновляет атрибуты в базе данных в режиме реального времени, для Backbone все молчат, и моя коллекция не изменяется сама в реальном времени. Если я обновляю страницу, она обновляется. Как запускать события магистрали из приложения Rails в режиме реального времени? Нужно ли мне использовать другую структуру или ее можно сделать просто в рельсах?Триггерные базовые события из Rails в реальном времени

ответ

7

Эта функциональность не предоставляется Rails из коробки, поэтому вам потребуется индивидуальное решение. Я бы порекомендовал взглянуть на Faye, систему обмена сообщениями pub/sub, которая легко интегрируется с Rails через Faye gem.

Чтобы выполнить то, что вы хотите, вам необходимо настроить сервер Faye в соответствии с документами. В браузере вам необходимо создать клиент, как описано here. С клиентом браузера вы можете подписаться и прослушать сообщения на канале. В бэкэнд, когда ваш работник Sidekiq завершает и обновляет соответствующие данные, вы можете опубликовать сообщение на канале Faye. После получения сообщения в клиенте браузера вы можете делать все, что хотите, включая запуск событий в коллекции Backbone. Надеюсь это поможет.

+0

Спасибо. Делают ли sidekiq и faye работу в героике? – mansim

+0

@ mansim, да, они делают. Проверьте [Sidekiq Wiki] (https://github.com/mperham/sidekiq/wiki/Deployment) и [это] (http://stackoverflow.com/questions/5123136/is-it-possible-to-host -faye-on-heroku) SO сообщение для более подробной информации. Приветствия. –

Смежные вопросы