ExecJS并找不到JavaScript运行时

srb*_*ert 399 javascript ruby-on-rails-3.1 execjs

我正在尝试使用Mongoid/Devise Rails 3.1模板(MongoidDevise),并且我不断收到错误,指出ExecJS无法找到JavaScript运行时.当我没有安装任何东西时足够公平,但我已经尝试安装Node.js,MustangRuby Racer,但没有任何工作.

我找不到JavaScript运行时.有关可用运行时()的列表,请参见sstephenson/ExecJS(GitHub ExecJS::RuntimeUnavailable).

为了让这个工作,我需要做什么?

vin*_*uel 445

只需在您的gem文件中添加ExecJSRuby Racer并运行bundle install.

gem 'execjs'

gem 'therubyracer'
Run Code Online (Sandbox Code Playgroud)

以后一切都应该没问题.

  • 对于Rails 3.1 RC 6,您只需要指定`gem'therubyracer'` (35认同)
  • 由于记忆的使用,Heroku现在[强烈劝阻](http://devcenter.heroku.com/articles/rails31_heroku_cedar#troubleshooting)therubyracer.我在我的开发机器上安装了nodejs(https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager)并从我的gemfile中取出了therubyracer.另见http://stackoverflow.com/questions/7092107/rails-3-1-error-could-not-find-a-javascript-runtime. (19认同)
  • 这对我有用,rails 3.1rc4和Ubuntu 11.04(我第一次尝试使用rails 3.1).当我收到错误时,我正试图生成一个脚手架.仍然相当蹩脚,导轨3.1已经"破碎"开箱即用. (6认同)
  • 有没有在创建新应用程序时将这些宝石包含在默认Gemfile中? (5认同)
  • 这是比安装node.js更好的解决方案.如果您正在部署到远程服务器或与其他开发人员共享应用程序,那么让每个人都安装node.js比运行bundle install要痛苦得多,无论如何他们都会这样做. (2认同)

eld*_*all 426

Ubuntu用户

我在Ubuntu 11.04上有类似的问题.安装Node.js修复了它.

从Ubuntu 13.04 x64开始,您只需要运行:

sudo apt-get install nodejs
Run Code Online (Sandbox Code Playgroud)

这将解决问题.


CentOS/RedHat用户

sudo yum install nodejs
Run Code Online (Sandbox Code Playgroud)

  • 宝石'execjs'宝石'therubyracer'这是一个比这个更好的解决方案. (76认同)
  • 由于记忆的使用,Heroku现在[强烈劝阻](http://devcenter.heroku.com/articles/rails31_heroku_cedar#troubleshooting)therubyracer.我按照这个答案在我的开发机器上安装了nodejs,并从我的gemfile中取出了therubyracer.另见http://stackoverflow.com/questions/7092107/rails-3-1-error-could-not-find-a-javascript-runtime. (26认同)
  • 对于js运行时来说节点有点过分了 (11认同)
  • @dwaynemac我不同意.我宁愿将运行时作为OS库存在(默认情况下与Mac和Windows一样),而不是将另一个gem添加到依赖列表中. (11认同)

man*_*yal 77

在你的Gem文件中,写

gem 'execjs'
gem 'therubyracer'
Run Code Online (Sandbox Code Playgroud)

然后跑

bundle install
Run Code Online (Sandbox Code Playgroud)

一切都适合我:)

  • 你不需要添加'execjs' (9认同)

jwf*_*arn 48

我有一个类似的问题:我的Rails 3.1应用程序在Windows上工作正常,但在Linux上运行时得到与OP相同的错误.在两个平台上对我有用的修复是将以下内容添加到我的Gemfile:

gem 'therubyracer', :platforms => :ruby
Run Code Online (Sandbox Code Playgroud)

诀窍是知道:platforms => :ruby实际意味着只使用这个宝石"C Ruby(MRI)或Rubinius,但不是Windows."

对于其他可能的值:platforms中描述bundler手册页.

仅供参考:Windows有一个execjs可以定位的内置JavaScript引擎.在Linux上虽然有几个可用的安装,但没有内置. therubyracer是其中之一.其他列在execjs README.md中.


JDu*_*til 36

将以下gem添加到我的Gemfile中解决了这个问题:

gem 'therubyracer'
Run Code Online (Sandbox Code Playgroud)

然后捆绑新的依赖项:

$ bundle install
Run Code Online (Sandbox Code Playgroud)

  • execjs现已包含在rails中.只有在发布候选人期间才需要它. (6认同)

mos*_*ops 16

另一种方法是在没有包含您没有的东西的宝石组的情况下进行捆绑.

所以:

bundle install --without assets
Run Code Online (Sandbox Code Playgroud)

你根本不需要修改Gemfile,当然你提供的不是资产链的东西 - 通常适用于非开发环境.Bundle将记住.bundle/config文件中的'--without'设置.


Ram*_*aja 6

在gem文件中添加以下gem

gem 'therubyracer'
gem 'execjs'
Run Code Online (Sandbox Code Playgroud)

并运行

bundle install
Run Code Online (Sandbox Code Playgroud)

你做完了:)


小智 5

我有同样的错误,但只在我的临时服务器上而不是我的生产环境上。nodejs 已经安装在两个环境中。

通过键入:

which node
Run Code Online (Sandbox Code Playgroud)

我发现 node 命令位于:/usr/bin/node on production 但:/usr/local/bin/node in staging。

在登台上创建符号链接后,即:

sudo ln -s /usr/local/bin/node /usr/bin/node
Run Code Online (Sandbox Code Playgroud)

该应用程序然后在登台工作。

没有麻烦没有大惊小怪。


Wil*_* Hu 5

对于Amazon Linux(AMI):

sudo yum install nodejs npm --enablerepo=epel
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这应该是一个更高的水平 (2认同)