Rails 执行 rails server 报错 Could not find a JavaScript runtime

Azon · 2012年03月04日 · 最后由 yanbin92 回复于 2016年10月04日 · 22604 次阅读

小弟我初学 ruby,今天部署 rails 环境。在 debian 系统上,通过 rvm 安装的 ruby,rails,bundle。 使用 rails new demo 命令创建了一个名字为 demo 的项目,然后在 demo/script 目录下执行 rails server 命令,结果打印出了一堆错误信息。错误信息如下:

/home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/execjs-1.3.0/lib/execjs.rb:5
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-script-2.2.0/lib/coffee_script.rb:1
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-script-2.2.0/lib/coffee-script.rb:1
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:68:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:68:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:66:in `each'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:66:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:55:in `each'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler/runtime.rb:55:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/bundler-1.0.22/lib/bundler.rb:122:in `require'
    from /home/xudong/ruby/work/demo/config/application.rb:7
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/railties-3.2.2/lib/rails/commands.rb:53:in `require'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/railties-3.2.2/lib/rails/commands.rb:53
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/railties-3.2.2/lib/rails/commands.rb:50:in `tap'
    from /home/xudong/.rvm/gems/ruby-1.8.7-p358/gems/railties-3.2.2/lib/rails/commands.rb:50
    from script/rails:6:in `require'
    from script/rails:6

在 google 上搜了一天了,有相同问题的不少,但是能解决的没有。麻烦知道解决方案的高手们,给指点一下啊。

安装 Node.js 或者其他的 Runtime https://github.com/sstephenson/execjs

非常感谢 huacnlee 的解答,我重新安装了 execjs(通过命令 gem install execjs 安装),但还是没效果啊

#2 楼 @Azon execjs 还需要后端才能处理,想简单解决可以加上这个 Gem

gem 'therubyracer'

感谢@Rei ,这个问题终于解决了。

sudo apt-get install nodejs

说句老实话,我推荐新手用 3.0.x 的版本,熟悉了再慢慢跟进最新版本。 3.2 太多新东西,有点扰乱了你的学习主题。

我也觉着还是换成 3.0 吧,用 3.2 到处都在报错。也不知道换成 3.0 会怎么样

谢谢诸位的建议,解决了问题。采用了以下三步:

gem install execjs gem install therubyracer sudo apt-get install nodejs

匿名 #9 2012年03月28日

遇到同样问题 用了前两步解决问题,nodejs 暂时好像还用不到 gem install execjs gem install therubyracer

我安装的时候需要 nodejs 的,9 楼的,可能你系统已经带了这个程序了吧。

解决方式是在 gemfile 中加入 Ruby 代码
gem 'execjs'
gem 'therubyracer' 执行 bundle install 见 http://1.dale.sinaapp.com/2012/06/rails-could-not-find-a-javascript-runtime-%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95/

楼上正解。。。

13 楼 已删除

安装 nodejs 最方便

我也是 ruby 小白,昨天在执行 rails s 时也遇到同样问题,刚开始是在 Gemfile 文件中加入: gem 'execjs' gem 'therubyracer' 然后 bundle install,再去执行 rails s 就成功了。 后来觉得如果每次都这样搞的话就太麻烦了,所以查看了一下本地的 gem 包,发现 execjs 以及 therubyracer 都有了,所以就又用 sudo apt-get install nodejs 安装了 node.js,之后去掉 Gemfile 里边的两个相关的 gem 包的代码,再一次 bundle install 之后就能正常运行 rails s 了。

参照 8 楼,三步确实搞定!

execjs 会选择一个 js 解释器, therubyracer 或者 nodejs 选择一个就行了 ruberacer 需要在 Gemfile 里指定, 如果系统有 nodejs,那么不需要在 Gemfile 里指定了

修改 Gemfile,将gem 'therubyracer', platforms: :ruby 前面的#去掉即可。

修改 Gemfile 文件的 source 'https://rubygems.org' 替换成 source 'https://ruby.taobao.org'

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