2015-11-19 2 views
0

Я добавил plezi в Gemfile и создал такой инициализатор:Plezi маршрут в приложении Rails

#config/initializer/plezi.rb 
class NewsPublisher 
    def on_open 
    binding.pry 
    end 
end 

route '/ws', NewsPublisher 

Когда я пытаюсь соединить его с помощью JS с этим кодом new WebSocket("ws://127.0.0.1:3000/ws"); я получать следующее сообщение об ошибке на стороне клиента: Error during WebSocket handshake: Unexpected response code: 404

на стороне сервера у меня есть: ActionController::RoutingError (No route matches [GET] "/ws"):

Может кто-нибудь объяснить, как использовать plezi маршруты в приложении Rails?

ответ

0

В Plezi-х getting started guide говорится, что:

Если ваш класс контроллер определяет ON_MESSAGE (данные) обратного вызова, plezi автоматически включит WebSocket соединения для данного маршрута.

Это утверждение должно быть, вероятно, повторено в websockets и направляющих Rails ... но я все еще пишу документацию и не заполнен.

Чтобы убедиться, что Plezi позволяет использовать веб-сайты для маршрута '/ws', добавьте обратный вызов on_message (даже пустой). то есть:

#config/initializer/plezi.rb 
class NewsPublisher 
    def on_open 
    binding.pry 
    end 
    def on_message data 
    puts "Websocket got: #{data}" 
    end 
end 

Plezi.route '/ws', NewsPublisher 

Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы.

EDIT (добавление дополнительной информации из комментариев)

Plezi использует Iodine, как это сервер, минуя hijack API Rack (в Йод является быстрое расширение C для Ruby, он действует как сервер Rack, с носителями WebSockets поддержка).

В Plezi-х guide to Plezi with Rails/Sinatra/Rack, утверждается, что при использовании Plezi в Rails/Синатра/Rack:

Там только один улов - мы не можем иметь более одного веб-сервера для каждого приложения. Это означает, что наше существующее приложение Rack ДОЛЖНО использовать Plezi (Iodine, фактически), поскольку это веб-сервер.

Убедитесь, чтобы удалить серверы из Gemfile (т.е. thin, puma, unicorn и т.д. »).

Как насчет Apache (или Nginx) и пассажира?

Apache может перенаправлять запросы на Iodine, подобно прокси и аналогично тому, как Apache работает вместе с пумой, пассажиром, единорогом, тонким и другими приложениями.

Возможно использование Apache или Nginx, но не пассажир.

Производительность?

Проверьте и посмотрите.

Iodine - это расширение C, которое использует либо epoll, либо kqueue системные вызовы, которые очень быстры и созданы для параллелизма. Кроме того, у Iodine очень хороший дизайн управления памятью, где объекты Ruby, переданные на «Ruby-land», часто перерабатываются или очищаются, чтобы обеспечить оптимизированную производительность ... но это все просто слово. Существует только один способ узнать - тест.

+0

Просто добавлен метод on_message, но он не исправляет проблему, у меня такие же ошибки. –

+0

@SergeiStruk Предполагаю, что вы перезапустили приложение ...? Я немного удивлен. Я немного поеду на свой ноутбук, чтобы экспериментировать. Единственное различие, которое я могу придумать (у меня есть приложение с Rails и Plezi), заключается в том, что я мог написать «Plezi.route' вместо« route »... – Myst

+1

У меня есть класс в течение следующих двух часов ... Для теперь, пожалуйста, разместите файл gem и убедитесь, что вы не используете другой сервер (не используйте 'thin' или' puma') или драгоценный камень, который добавит его собственный сервер. – Myst

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