KobitoをブログのエディタにするにあたってQiitaに投稿を始めてみます。不足あればコメントください。
デザインの微調整やらをテストと併せてやっていこうとした矢先。livereloadが機能しない。
Could not connect to LiveReload server. Please make sure that LiveReload 2.3 (or later) or another compatible server is running.
このようなトラブルはGemfileのバージョンを全く固定していないので、仕方がないのですが(Livereloadなしではデザイン微調整なんてやってられません。
GuardfileなどはREADMEの通りにやっているし、何せ前回まで動いてた時と特に何も変えていない。したとすればbundle update。
結論
guard-livereload
のバージョンを1.4.0から2.1.1に指定してあげると解消しました。
環境
- OSX Marvericks
- Ruby 2.1.0
- Rails 4.0.3
- Guard 2.4.0
- Chrome Extentionで利用
どのようにして原因に辿り着いたか
今回の現象はguardコマンドは問題なく動いているように見えることが厄介でした。
13:50:23 - INFO - Guard is using Growl to send notifications.
13:50:23 - INFO - Guard is using TerminalTitle to send notifications.
13:50:23 - INFO - LiveReload is waiting for a browser to connect.
13:50:23 - INFO - Guard::RSpec is running
13:50:23 - INFO - Guard is now watching at '/private/var/www/html/app'
そこで、guardのオプションで-d
を実行してみたところ。
14:42:47 - INFO - Browser disconnected.
/private/var/www/html/app/vendor/bundle/ruby/2.1.0/gems/guard-livereload-1.3.0/lib/guard/livereload/websocket.rb:13:in `dispatch': undefined method `request_path' for #<HTTP::Parser:0x007fa33aeb4508> (NoMethodError)
from /private/var/www/html/orda/vendor/bundle/ruby/2.1.0/gems/em-websocket-0.3.8/lib/em-websocket/connection.rb:73:in `receive_data'
エラーっぽいのが出てました。
そこで検索してみると以下のページに辿り着きました。
-
Mac OSX 10.9, browser not connecting,
dispatch': undefined method
request_path' for #HTTP::Parser:0x0000010285b4e0 (NoMethodError)
まさにこれです。そこでGemfileを以下のように修正した。
group :development do
#gem 'guard'
gem 'guard-rspec'
gem 'guard-livereload', '~> 2.1.1', require: false
end
guard-rspec
があればguardは指定しなくてもいいようです。
けれど環境によっては依存性?のエラーが出ると思います。
Bundler could not find compatible versions for gem "http_parser.rb":
In Gemfile:
guard-livereload (~> 2.1.1) ruby depends on
http_parser.rb (~> 0.5.3) ruby
twitter (>= 0) ruby depends on
http_parser.rb (0.6.0)
そのような場合、私のようにバージョンを指定していなくて本番運用していなければGemfile.lockを一度削除すれば解決します。
以上です。