2

アプリで情報をリアルタイムでプッシュするために Cramp をいじっています。ローカルではすべてうまく機能していますが、herokuにプッシュすると、ポートに問題があるようです。

websocket から継承する cramp にソケットをセットアップしました

class LiveSocket < Cramp::Websocket

また、基本的にホームページ用にいくつかの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 サーバーを実行できることはわかっているので、これも機能させる方法があるはずです。

助けてくれてありがとう。

乾杯

スチュアート

4

1 に答える 1

0

Heroku が websockets をサポートしているとは思わない :( http://devcenter.heroku.com/articles/http-routing#the_herokuappcom_http_stack

于 2011-09-13T16:52:32.383 に答える