質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

3488閲覧

WebSocket-railsでnetwork error: The operation couldn’t be completed. Connection refused

sunegex

総合スコア49

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/02/25 02:23

編集2022/01/12 10:55

やろうとした事

Ruby on Railsでのチャット機能につて学ぼうと思い、
ネットで関連のgemなどを見て、WebSocketを使用した方法でサンプルを作る事にしました。
サンプルと言っても、
railsのwebsocket-railsについて解説する(myrubyのブログ様)
このURLを参考にさせて頂いて、ほぼ丸写しです。

サーバーエラー

Cloud9上で、$ rails s -b $IP -p $PORT を実行すると、

:~/workspace/chat_sample $ rails s -b $IP -p $PORT => Booting Thin => Rails 4.0.5 application starting in development on http://0.0.0.0:8080 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server Exiting /home/ubuntu/workspace/chat_sample/config/events.rb:4:in `block in <top (required)>': undefined local variable or method `config' for #<WebsocketRails::EventMap::DSL:0x0000000346cca8> (NameError)

というエラーが出ました。
ここで events.rb4:in と書いてあるので、そこを見ると、

WebsocketRails::EventMap.describe do subscribe :websocket_chat, to: MessagesController, with_method: :message_recieve #subscribe :send_message, 'messages#new' config.middleware.delete Rack::Lock end

参考にさせて頂いたサイト様ではこの行に関して、
「 開発環境ではRack::Lockを無効にしないとエラーになるので以下のようにしておきます 」
との事でした。
ここで、良く分からなかったので、とりあえずこの4行目をコメントアウトしてみました。
すると、$ rails s -b $IP -p $PORT は通りました。

ネットワークエラー

しかし、今度はサンプルを開いたブラウザのコンソール上でエラーが出ました。

WebSocket network error: The operation couldn’t be completed. Connection refused

との事です。
これまた良く分からないので、このエラー文をそのままGoogle検索しました。
するとブラウザがSafariだからというような英語の記事がいくつか見当たりました。
しかし、rais s で表示されたURLをChromeで開いても、全く同じエラーがブラウザ上で出ました。

もう少し調べていると、
表示部に書いた<script>の部分に localhost:3000と書いてあり、
自分がCloud9のコンソールでrails s した際に、

Rails 4.0.5 application starting in development on http://0.0.0.0:8080

と出力されている事に気が付きました。

<script> var ws_rails = new WebSocketRails("localhost:3000/websocket"); // WebSocketRailsオブジェクトを生成し、WebSocket接続を行う。 // メッセージ受信時の処理 ws_rails.bind("websocket_chat", function(message){ var message_li = document.createElement("li"); // liを作る message_li.textContent = message; // liにmessageを代入 document.getElementById("chat_area").appendChild(message_li); }) // メッセージ送信時の処理。 document.getElementById("send").onclick = function(){   var comment = document.getElementById("comment").value;   ws_rails.trigger("websocket_chat", comment); // trigger(event_name, data, success_callback, failure_callback) } </script>

質問

  1. Rack::Lockを無効にするとは一体どういう事なのでしょうか?

  またなぜ、エラーになってしまったのでしょうか?

  1. localhotst:3000の部分は環境によって変更が必要なのでしょうか?

 

 よろしくお願いします。

環境

Cloud9 Gemfile source 'https://rubygems.org' ruby '2.0.0' gem 'rails', '4.0.5' group :development do gem 'sqlite3', '1.3.9' end gem 'sass-rails', '4.0.3' gem 'uglifier', '2.5.3' gem 'coffee-rails', '4.0.1' gem 'jquery-rails', '3.1.2' gem 'turbolinks', '2.5.1' gem 'jbuilder', '1.5.3' gem 'websocket-rails', '0.7.0' group :doc do gem 'sdoc', '0.4.1', require: false end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

とりあえず、2番だけ回答。

Rails 4.0.5 application starting in development on http://0.0.0.0:8080

のように Rails で、ポート8080 を開いているなら、同じポートに接続するようにする必要があります。

また、Cloud9 の場合、localhost ではなくて、Rails を起動時に 右上に URL が、出ると思いますので、その URL を指定する必要があります。

投稿2018/02/25 02:46

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sunegex

2018/02/26 00:51

ご回答ありがとうございます。 <script>の部分を var ws_rails = new WebSocketRails('https://<workspace>-<username>.c9users.io'); と修正してみたところ、 今度は、ブラウザのコンソールに WebSocket network error: The operation couldn’t be completed. (kCFErrorDomainCFNetwork error 2.) というエラーが出てきてしまいました。 WebSocketについて調べると、このエラーに遭遇している方はあまり多く無い様子でした。 これはCloud9という環境だから特別引き起こされているエラーなのでしょうか? もし、そうなら何か準備や環境を整える事で、Cloud9でも動作するのでしょうか? 初心者のため、質問の仕方も合っているかも分からなく、もし失礼がありましたら申し訳ございません。 もしお時間ありましたら、よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問