部署 Could not find a JavaScript runtime.

beasthang · 2012年01月01日 · 最后由 programmingworld 回复于 2014年09月25日 · 20181 次阅读

rails server 时出现 Could not find a JavaScript runtime. 在 stackoverflow 上说要修改 gemfile。这样是不是每新建一个 APP 就要修改下 gemfile,有没有其他一次解决的方法。ruby 1.8.7

在系统里装一个 Node.js

修改 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) 服务器还是跑不起来,有方法吗

搞定。多谢一楼。

这点对新手真坑爹。

我是直接在 Gemfile 里面加入

gem 'therubyracer'
gem 'execjs'

反正加一个 gem 'therubyracer' 或者装一个 node.js 随你

匿名 #8 2012年01月01日

我是装个 node.js 搞定的。安装 Gems 时,怕了 GFW 了。

#4 楼 @ekim_sgra

原因很简单,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 抛的一个友好提示已经足够了。

#9 楼 @hooopo You are right! “Rails is Not for Beginners”. 回想过去 2007 年我开始学习 rails 的时候,rails 真的很适合初学者。 现在搭建一个 rails 开发环境,已经不再像当年那么简单了。

#10 楼 @ery 好吧 回想过去 2007 年 我开始学 rails 的时候 半年过去了 我连 scaffold 都没有搭建成功 然后就放弃了 学 Ruby 去了...

#9 楼 @hooopo 这个解释很详细,赞!

我不赞成 Rails 新建项目的时候需要做额外工作才能跑起来,不然的话 sqlite3 应该去掉,抛出一个未添加数据库驱动的提示。

#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:

  1. 安装 nodejs sudo apt-get install nodejs

  2. 自己编译: $ 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:inmodule: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:inrequire' /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:inblock in load_dependency'

碰到一样的问题,根据 15 楼朋友的方法 2 解决了,我还想尝试一下安装 therubyracer.gem 可是一直不成功,报: ERROR: Error installing therubyracer: ERROR: Failed to build gem native extension. 有谁可以提供帮助吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号