Я играл с Cramp, чтобы в режиме реального времени передавать информацию в приложении. Все отлично работает локально, но когда я отхожу к героку, у меня возникают проблемы с портами.
У меня установлен сокет в тесноте, который наследуется от websocket
class LiveSocket < Cramp::Websocket
и у меня также есть действие "судорога", называемое "дом", которое, в основном, просто отображает эрб для домашней страницы
class HomeAction < Cramp::Action
в моем файле маршрута я настроил следующий, а также статический файловый сервер
Rack::Builder.new do
puts "public file at #{File.join(File.dirname(__FILE__), '../public')}"
file_server = Rack::File.new(File.join(File.dirname(__FILE__), 'public'))
routes = HttpRouter.new do
add('/').to(HomeAction)
get('/LiveSocket').to(LiveSocket)
end
run Rack::Cascade.new([file_server, routes])
end
Затем на стороне клиента javascript подключается к
var ws = new WebSocket("ws://<%= request.host_with_port %>/LiveSocket");
Как я говорю локально, все это работает. Подключаемся и начинаем получать уведомления с сервера. На героку мы разбегаемся по стеку Cedar и имеем профиль, который выглядит как
web: bundle exec thin --timeout 0 start -p $PORT
Когда я загружаю сайт, сама страница загружается нормально, но при попытке подключиться к веб-розетке я получаю сообщение об ошибке
servername.herokuapp.com Unexpected response code: 200
Я предполагаю, что это как-то связано с тем, как heroku направляет свои запросы, но я знаю, что вы можете запустить сервер websocket node.js на heroku, так что подумайте, должен быть способ заставить это работать тоже.
Заранее спасибо за любую помощь.
ура
Стюарт