Я пытаюсь создать приложение websocket rails с помощью em-websocket. Я разместил ниже код в файле config/initalizers/websocket.rb, но когда я запускаю сервер rails, приложение не запускается. если я удалю код, он начнет нормально работать. То же самое происходит на моей локальной машине и сервере.сервер rails не запускается с em-websocket
require 'eventmachine'
require 'em-websocket'
EventMachine.run {
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen {
puts "WebSocket connection open"
ws.send "Hello Client"
}
ws.onclose { puts "Connection closed" }
ws.onmessage { |msg|
puts "Recieved message: #{msg}"
ws.send "Pong: #{msg}"
}
end
puts "Websocket started"
}
Я получаю эту консольную распечатку
=> Booting WEBrick
=> Rails 3.2.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Websocket started
Если я удалить вышеуказанный код начинается хорошо, и я получаю:
=> Booting WEBrick
=> Rails 3.2.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-12-21 04:19:52] INFO WEBrick 1.3.1
[2012-12-21 04:19:52] INFO ruby 1.9.3 (2012-04-20) [i386-mingw32]
[2012-12-21 04:19:52] INFO WEBrick::HTTPServer#start: pid=1484 port=3000
Любые идеи будут высоко оценены
Это правда, но разве не возможно иметь 1 приложение для обоих серверов? Итак, вам нужно только запустить 1 приложение, использовать 1 консоль и развернуть только один раз? –
Хм. Если вы действительно хотите это сделать, я бы использовал Thin как ваш веб-сервер разработки. Это чисто гипотеза, но Thin имеет бэкэнд EventMachine (который Webrick не делает), и поэтому теоретически EventMachine.run должен привязываться к глобальной замкнутой петле реактора? –
Я только что наткнулся на драгоценный камень, названный [мастером] (https://www.google.nl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDQQFjAA&url=https%3A%2F%2Fgithub. com% 2Fddollar% 2Fforeman & ei = 15NqUa-3B4nO0QXByoAY & usg = AFQjCNHI9ByOifzjRiX1pZPe9vk_OM7QUg & sig2 = Yhweb3l7sx31qVyBQR7NpA & bvm = bv.45175338, d.d2k), вы можете привязать пару имен к процессам и запустить их все с помощью 'foreman start'. Что я сделал, это поставить сервер для сокетов в папке с именем «socket_server» и добавлены исправления выполнения для рельсов и сервер сокетов (faye) для мастера 'Procfile' .. –