Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

ドットインストールで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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした