前提
Ruby on Railsの学習のために、SNS系サイトをCloud9で作成しています。
そこで、チャット機能を実装しようと思い、gemのwebsocket-railsを使うことにしました。
events.rbを使ってのルーティングや、javascriptでの書式などについては分かったのですが、
Cloud9でサーバーを起動する際にエラーが起きてしまいました。
エラー (1)
Cloud9で開発中のアプリでWebSocketRailsを使いたいけど、ドメイン?接続先?なにそれ。
を参考にさせて頂いて、
HTML
1[ home.html.erb ] 2<script> 3 var ws_rails = new WebSocketRails("chat_sample-takumis0.c9users.io:443/websocket"); 4 ws_rails.bind("websocket_chat", function(message){ 5 var message_li = document.createElement("li"); 6 message_li.textContent = message; 7 document.getElementById("chat_area").appendChild(message_li); 8 }) 9 document.getElementById("send").onclick = function(){ 10 var comment = document.getElementById("comment").value; 11 ws_rails.trigger("websocket_chat", comment); 12 } 13</script>
のように、WebSocketRailsの引数に "ワークスペース-ユーザー名.c9users.io:443/websocket"
としてあるのですが、
$ rails s -b $IP -p 443 とすると、
=> Booting Thin => Rails 4.0.5 application starting in development on http://0.0.0.0:443 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server Thin web server (v1.7.2 codename Bachmanity) Maximum connections set to 1024 Listening on 0.0.0.0:443, CTRL+C to stop Exiting /usr/local/rvm/gems/ruby-2.0.0-p648@samurai/gems/eventmachine-1.2.5/lib/eventmachine.rb:530:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
というようにエラーが出て、サーバーが実行されません。
エラー (2)
そこで、WebSocketRailsの引数を "ワークスペース-ユーザー名.c9users.io:8080/websocket"のようにポート番号を8080にして、
$ rails s -b $IP -p $PORT を実行すると、
サーバーは実行されるのですが、ブラウザ上のコンソールでエラーが出てしまいます。
WebSocket connection to 'ws://chat_sample-takumis0.c9users.io:8080/websocket' failed: Status line does not end with CRLF
試したこと
エラー(1)の`start_tcp_server'について調べると、ポートが使用中だから起動出来ないというような記事が出てきたので、
ポートを握っているプロセスを見たい時
を参考にさせて頂いて、
$ netstat -tulpn | grep : 443
としてみたのですが、
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
grep: 443: No such file or directory
と出てきてしまいました。
質問
Cloud9でrailsをポート443で起動するのには、特別な手順があるのでしょうか?
もしくは、8080で起動しても、WebSocketは独立して443で開かれるという事なのでしょうか?
よろしくお願いします。
あなたの回答
tips
プレビュー