やろうとした事
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>
質問
- Rack::Lockを無効にするとは一体どういう事なのでしょうか?
またなぜ、エラーになってしまったのでしょうか?
- 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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/26 00:51
2018/02/26 01:57