Как использовать Rails в качестве сервера DDP с клиентом Meteor.js

У нас есть приложение Rails, которое работает только с HTTP API. На стороне клиента сейчас используется Ember.js. Мы не слишком впечатлены Ember, и нам очень нравится подход Meteor.js. Поэтому мы хотели бы заменить клиентскую часть на Meteor.js и взаимодействовать с сервером Rails через веб-сокеты, использующие протокол распределения данных (DDP), чтобы мы могли продолжать использовать модели, почтовые программы и контроллеры в Rails. Внедрение серверной части DDP должно быть простым.

Однако мы не знаем, как заставить Rails говорить о веб-сокетах. Мы нашли Reel, который упрощает прием запросов через веб-сокеты в автономной среде. Reel выглядит великолепно, так как мы все равно хотели бы реализовать DDP поверх стека Celluloid. Но как насчет запуска Reel в среде Rails? Нужен ли нам для этого «rails runner»? И мы хотели бы продолжать использовать существующие контроллеры для отправки входящих запросов (например, для добавления/изменения/удаления ресурсов). Возможно ли это вообще без запроса, поступающего через Rack?

Любой вклад приветствуется.


person Patrik    schedule 13.04.2014    source источник
comment
Я ничего не знаю о Rails, но с ним нельзя использовать Meteor. Meteor — это полноценный фреймворк; он обрабатывает как клиентскую, так и серверную часть.   -  person Geoffrey Booth    schedule 13.04.2014
comment
Теоретически вы можете научить Rails говорить с DDP, но более сложной задачей является реализация синхронизации в реальном времени с вашей базой данных, компенсация задержки и т. д. Если вы просто хотите использовать интерфейсную часть Meteor без большинства функций, но по-прежнему сохранять обновления активных страниц (например, привязки данных), взгляните на Blaze — механизм рендеринга страниц Meteor в реальном времени.   -  person imslavko    schedule 14.04.2014
comment
Спасибо за ваши ответы. Синхронизация в реальном времени должна быть простой. Просто добавьте обратные вызовы after_create, after_update и after_destroy в соответствующие модели, и обратные вызовы отправят обновления через DDP подписавшимся клиентам. Я просто не знаю, как запустить сервер Celluloid::IO в контексте Rails. Лучшие практики?   -  person Patrik    schedule 15.04.2014


Ответы (2)


Немного поздно, но я реализовал DDP на Ruby, вы можете проверить это здесь:

https://github.com/d-snp/ruby-ddp-server

Он также включает реализацию EJSON. Он построен поверх целлулоидного веб-сокета и может запускаться просто как приложение для стойки.

Я сделал интеграцию с RethinkDB, которую можно использовать в качестве эталона для создания собственной реализации коллекций.

https://github.com/d-snp/ruby-ddp-server-rethinkdb

Я также сделал пример приложения для чата, которое можно найти здесь:

https://github.com/d-snp/celluloid-rethinkdb-chat

person Tinco    schedule 04.03.2015
comment
Большое тебе спасибо! Очень интересно. - person Patrik; 06.03.2015

Это то, что я тоже давно хотел сделать, чтобы интегрировать старый «устаревший» код Rails. Вот лучший способ, который я нашел:

Поскольку вы не будете использовать какой-либо из маршрутизаторов/контроллеров/представлений Rails, а просто сможете считывать данные и отправлять их клиенту, я рекомендую вам использовать Rails для создания API JSON в базе данных и развертывания кода, а затем в Meteor. вы можете потреблять данные через http-пакет, это будет происходить на сервере через регулярные промежутки времени и заполнять MongoDB необходимыми нормализованными данными, после чего он будет обслуживать клиент браузера.

Я работаю над таким приложением, которое будет хранить нормализованную версию данных в Mongo и реляционную версию данных в mySql (через Rails), таким образом, я могу сохранить устаревшие функции Rails, которые я не хочу переписывать в JS, и получить преимущества Meteor для одной страницы, которая мне нужна больше всего.

person Timothy Johnson    schedule 14.05.2014