WEB系の技術を詳しく解説

【NomethodError】Rails Tutorial 3章でエラーが出たので調べてみたらtmuxが原因だった

独学で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なので、また時間のある時に調査しようと思います。

スポンサードリンク

3 Comments

a

僕も今このエラーに悩まされてたんですが、この記事のおかげで解決できました!ありがとうございます! 僕もtmuxが怪しいのかな?と思ってたんですがまさかインストールで治るとは… 理屈が分からないのが気持ち悪いですが、とにかく助かりました!

返信する
ニッひび

tmuxという存在すら知らない初心者でした。解説ありがとうございました!助かりました

返信する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です