rails server 时出现 Could not find a JavaScript runtime. 在 stackoverflow 上说要修改 gemfile。这样是不是每新建一个 APP 就要修改下 gemfile,有没有其他一次解决的方法。ruby 1.8.7
修改 gemfile 以后运行服务器又出现 home/beasthang/.rvm/gems/ruby-1.8.7-p352/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:234:in `load': /home/XXX/demo/demo1/config/initializers/session_store.rb:3: syntax error, unexpected ':', expecting $end (SyntaxError) 服务器还是跑不起来,有方法吗
原因很简单,execjs 根据不同平台依赖不同的 js runtime:
therubyracer - Google V8 embedded within Ruby
therubyrhino - Mozilla Rhino embedded within JRuby
Johnson - Mozilla SpiderMonkey embedded within Ruby
Mustang - Mustang V8 embedded within Ruby
Node.js
Apple JavaScriptCore - Included with Mac OS X
Mozilla SpiderMonkey
Microsoft Windows Script Host (JScript)
选择任何一个 js runtime 是开发者自己的事情,如果 Rails 默认在 Gemfile 里加上 therubyracer 的话也会有很多人抱怨的。
https://github.com/rails/rails/pull/3619 这里已经有 pull request 可以在找不到系统里的 js runtime 就在 gemfile 里添加 therubyracer 的特性。但是木有被采纳。
可能这就是 DHH 说的“Rails is Not for Beginners”吧
对于正常的开发者,execjs 抛的一个友好提示已经足够了。
#13 楼 @Rei 我觉得和 sqlite3 还是有区别的 应该和系统没装 mysql 环境的情况类似 属于系统环境依赖
这也不全是 Rails 的问题,应该是 execjs 的问题
而 execjs 的做法也没有什么问题,execjs 的情况和 mini_magick 的情况类似,要运行 mini_magick 必须系统有 ImageMagick 或 GraphicsMagick 环境
当我们使用 mini_magick 的时候都没有抱怨过,出错了就检查一下 identify 一下检查系统环境,没有就 apt-get install imagemagick
同样,execjs 的情况也是,出错了 apt-get install nodejs 一下就 ok
但是,不管怎样,Rails 的环境是越来越难搭建了......这是事实。
我的是 ubuntu 环境 in `autodetect’: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
方法 1: 在 gemfile 中添加 gem 'execjs' gem 'therubyracer'
bundle install 后即可
方法 2:
安装 nodejs sudo apt-get install nodejs
自己编译: $ git clone git://github.com/ry/node.git $ cd node $ ./configure $ make
$ sudo make install
请教个问题啊,我在 crontab 中执行 rake 报错了 therubyracer 和 execj 两个包我都装了,nodejs 我也在系统中装好了,执行 node -v 能看到 nodejs 的版本,但是执行 crontab 的时候还是报错
Warning: NLS_LANG is not set. fallback to US7ASCII.
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in autodetect'
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in
module:ExecJS'
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:4:in <top (required)>'
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.1.12/lib/active_support/dependencies.rb:240:in
require'
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.1.12/lib/active_support/dependencies.rb:240:in block in require'
/opt/app/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.1.12/lib/active_support/dependencies.rb:223:in
block in load_dependency'
碰到一样的问题,根据 15 楼朋友的方法 2 解决了,我还想尝试一下安装 therubyracer.gem 可是一直不成功,报: ERROR: Error installing therubyracer: ERROR: Failed to build gem native extension. 有谁可以提供帮助吗?