独学でRuby on Rails チュートリアルを進めています。チュートリアル通りにやっても、実はエラーが出たりで挫折する方も多いと思うのですが、エラーは逆に成長するチャンスだと思ってます。
今回は第3章で気になるエラーが出たので調べてみました。
スポンサードリンク
目次
rais test でエラーが吐かれる
今回発生したエラーはこちら
4 runs, 7 assertions, 0 failures, 0 errors, 0 skips /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/tmux/client.rb:12:in `version': undefined method `[]' for nil:NilClass (NoMethodError) from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/tmux.rb:69:in `_check_available' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/base.rb:59:in `initialize' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notif any/notifier/detected.rb:100:in `new' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:100:in `_add' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:62:in `block (2 levels) in detect' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:60:in `each' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:60:in `detect' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:60:in `block in detect' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:59:in `each' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/detected.rb:59:in `detect' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier.rb:180:in `_detect_or_add_notifiers' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier.rb:198:in `_activate' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier.rb:87:in `initialize' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier.rb:42:in `new' from /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier.rb:42:in `connect' from /usr/local/rvm/gems/ruby-2.4.1/gems/guard-2.13.0/lib/guard/notifier.rb:11:in `connect' from /usr/local/rvm/gems/ruby-2.4.1/gems/guard-2.13.0/lib/guard/notifier.rb:31:in `notify' from /usr/local/rvm/gems/ruby-2.4.1/gems/guard-compat-1.2.1/lib/guard/compat/plugin.rb:113:in `notify' from /usr/local/rvm/gems/ruby-2.4.1/gems/guard-minitest-2.4.4/lib/guard/minitest/notifier.rb:31:in `notify' from /usr/local/rvm/gems/ruby-2.4.1/gems/guard-minitest-2.4.4/lib/guard/minitest/reporter.rb:10:in `report' from /usr/local/rvm/gems/ruby-2.4.1/gems/minitest-5.11.3/lib/minitest.rb:808:in `each' from /usr/local/rvm/gems/ruby-2.4.1/gems/minitest-5.11.3/lib/minitest.rb:808:in `report' from /usr/local/rvm/gems/ruby-2.4.1/gems/minitest-5.11.3/lib/minitest.rb:141:in `run' from /usr/local/rvm/gems/ruby-2.4.1/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `run' from /usr/local/rvm/gems/ruby-2.4.1/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from -e:1:in `<main>'
4 runs, 7 assertions, 0 failures, 0 errors, 0 skips /usr/local/rvm/gems/ruby-2.4.1/gems/notiffany-0.1.1/lib/notiffany/notifier/tmux/client.rb:12:in `version’: undefined method `[]’ for nil:NilClass (NoMethodError)
と出ています。NoMethodErrorが吐かれてますね。テスト自体は成功しているのですが、いちいちログが出てくるのでは結果も見にくいですし早急に解決する必要があります。
色々調べてみると「tmux」というものが原因っぽいという事が分かりました。
tmuxとは
tmuxは端末多重化ソフトウェアだそうです。
僕はUnixをあまり触ったことがなかったのでこの名称を知らなかったのですが、これがあると1つのターミナルで複数のサーバーにログインしたり、それぞれの仮想端末で別々のプログラムを実行できるそうです。
要はAWSのターミナルがtmuxという事でしょうか。複数タブ開けますよね。こんな名称だったのか。
今回のエラー解決はtmuxを導入すれば解決する
とりあえずこのエラーはtmuxを入れると解決するそうです。早速導入してみる。
$ sudo yum install -y tmux
するとこんなログが生成されます。
Loaded plugins: priorities, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00 amzn-updates | 2.5 kB 00:00 1045 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package tmux.x86_64 0:1.8-4.12.amzn1 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================== Package Arch Version Repository Size ========================================================================== Installing: tmux x86_64 1.8-4.12.amzn1 amzn-main 254 k Transaction Summary ========================================================================== Install 1 Package Total download size: 254 k Installed size: 543 k Downloading packages: tmux-1.8-4.12.amzn1.x86_64.rpm | 254 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : tmux-1.8-4.12.amzn1.x86_64 1/1 Verifying : tmux-1.8-4.12.amzn1.x86_64 1/1 Installed: tmux.x86_64 0:1.8-4.12.amzn1 Complete!
testしてみましょう。
ec2-user:~/environment/sample_app2 (static-pages) $ rails t Running via Spring preloader in process 4847 Run options: --seed 3689 # Running: Run options: --seed 3689 # Running: ........ Finished in 0.301184s, 13.2809 runs/s, 23.2416 assertions/s. 4 runs, 7 assertions, 0 failures, 0 errors, 0 skips Finished in 0.318273s, 12.5678 runs/s, 21.9937 assertions/s. 4 runs, 7 assertions, 0 failures, 0 errors, 0 skips
直りました。良かった。
まとめ
Rails Tutorial の序盤でこのようなエラーが出たらtmuxを導入してみて下さい。(それでもまだエラーログが出る場合はrails db:migrateをしてみて下さい。)
なぜこのエラーが発生するのか原因は不明です。もしわかる方いたらコメントして頂けると幸いです。
【追記】guardというgemが影響してるっぽいです。初心者にはやや応用のテスト関係に関わるgemなので、また時間のある時に調査しようと思います。
スポンサードリンク
僕も今このエラーに悩まされてたんですが、この記事のおかげで解決できました!ありがとうございます! 僕もtmuxが怪しいのかな?と思ってたんですがまさかインストールで治るとは… 理屈が分からないのが気持ち悪いですが、とにかく助かりました!
直って良かったです!頻繁に遭遇するエラーではないので困りますよね…
tmuxという存在すら知らない初心者でした。解説ありがとうございました!助かりました