我一直在玩Cramp,在应用程序中实时推送信息。它在本地工作得很好但是当我推送到heroku时,我似乎遇到了端口问题。
我在抽筋中设置了一个套接字,它继承自websocket
class LiveSocket < Cramp::Websocket
我也有一个名为home的抽筋动作,基本上只是为主页提供一些erb
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");
正如我在当地说的那样一切正常。我们连接并开始从服务器接收通知。在heroku上,我们在Cedar堆栈上运行很薄,并且有一个看起来像
的配置文件web: bundle exec thin --timeout 0 start -p $PORT
当我加载网站时,页面本身加载正常,但在尝试连接websocket时出现错误,说明
servername.herokuapp.com Unexpected response code: 200
我猜这与heroku如何路由它的请求有关,但我知道你可以在heroku上运行一个node.js websocket服务器,所以我必须有办法让它工作。
提前感谢您的帮助。
欢呼声
stuart
答案 0 :(得分:0)
我认为Heroku不支持websockets :( http://devcenter.heroku.com/articles/http-routing#the_herokuappcom_http_stack