LoginSignup
20
15

More than 5 years have passed since last update.

RailsのScaffold後、rails sしてブラウザアクセスするとExecJS::RuntimeError in Users#index

Last updated at Posted at 2014-09-07

ドットインストールでRailsの勉強していますが、#04 Scaffoldを使ってみようで早速つまづいた。

ローカルの環境はMac+rbenvで構築したもの

エラー内容は以下のようなもので、途中のトレースは省略

  • Showing /Users/{user_name}/Development/dotinstall-lesson/tryapp/app/views/layouts/application.html.erb where line #6 raised:

で、最後は

  • in /Users/{user_name}/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/turbolinks-2.3.0/lib/assets/javascripts/turbolinks.js.coffee
scafold_app/app/views/layouts/application.html.erb
<head>
    <title>DotinstallLesson</title>
    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
</head>

とある。

検索すると、いくつか解決策らしきものが出てくるけど、根本原因がよくわからない、Windowsだと発生するみたいな情報もあるけど、こちらはMacな環境

上記では、execjsのソース?を編集するということだけど、なんかそれは違う気がする

そのほかだとExecJSをgemでインストールし直したら、うまくいった、みたいなものもある

ExecJSがちゃんと読み込まれていないとか、そういう話?

もう少し色々見て行くと、冒頭に書いたScaffoldで自動生成されたテンプレートファイルを編集すると直る的なことが書かれている

そもそもExecJSが動く際にサポートしているJSのエンジンruntimeがないってことかもしれない...

ExecJS lets you run JavaScript code from Ruby. It automatically picks the best runtime available to evaluate your JavaScript program, then returns the result to you as a Ruby object.

ExecJS supports these runtimes:

therubyracer - Google V8 embedded within Ruby
therubyrhino - Mozilla Rhino embedded within JRuby
Node.js
Apple JavaScriptCore - Included with Mac OS X
Microsoft Windows Script Host (JScript)

Mac環境下でも、Apple JavaScriptCoreをサポートしているっぽいけど、ローカル環境はHomebrewやrbenvで構築しているから、各ライブラリ間の参照関係とかが上手くリンクしていないのかもしれない?

ということで、brew listで確認したけど、ちゃんと入っているぞ

$ brew list
ansible     git     libyaml     pkg-config  ruby
autoconf    libgpg-error    node        rbenv       ruby-build
gdbm        libksba     openssl     readline

当然、node -vwhich nodeも返ってくる

$ node -v
v0.10.1
$ which node
/usr/local/bin/node

結果、Gemfileを編集して、gem 'execjs'を追記してbundle installしてみたが、それでは上手くいかず、テンプレートファイルを編集して、javascript_include_tag 'application'javascript_include_tag 'defaults'にしたらエラーは解決した

ちなみに、defaultでも「s」のついたdefaultsでも、どちらでも上手く行った... なぜ?

javascript_include_tag'application', 'defaults'あたりを調べれば、根本的なことがわかるかな... 取り敢えず、レッスンを続けたいので、このエラーに再会したらまた調べる

以下、ちょっと調べた時に出てきたもの、関係あるかな?

[追記 09/07, 2014]

分かったかも、rails sしてhttp://localhost:3000/にアクセスして、"About your application’s environment"にアクセスすると"JavaScript Runtime Node.js(V8)"とある

"V8"は、"therubyracer - Google V8 embedded within Ruby"の"V8"だろうから...

結果、テンプレートのjavascript_include_tag'application'のままで、アプリ直下のGemfileを編集して、コメントアウトされていたgem 'therubyracer', platforms: :rubyを有効にして、bundle installして、therubyracer以外もいくつかインストールされて、うまく動くようになった

Installing libv8 3.16.14.3
Installing ref 1.0.5
Installing therubyracer 0.12.1
20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15