ドットインストールで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
<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がないってことかもしれない...
- ruby on rails 3.1 - ExecJS and could not find a JavaScript runtime - Stack Overflow
- sstephenson/execjs - GitHub
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 -v
もwhich 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