ExecJS并且找不到JavaScript运行时


403

我正在尝试使用Mongoid / Devise Rails 3.1模板MongoidDevise),并且不断收到错误消息,指出ExecJS无法找到JavaScript运行时。当我没有安装任何东西的时候,还算公平,但是我尝试安装Node.jsMustangRuby Racer,但是没有任何效果。

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

我需要做什么才能使它正常工作?


4
顺便说一句-我正在使用ubuntu karmic。
srboisvert,2011年

您应该真正考虑更改答案。Node.js的答案远不及execjs / ruby​​racer。
肖恩·邓福德2013年

3
红宝石赛车还有其他问题。如果可以避免的话,Heroku不再建议将其包含在Gemfile中。devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer我认为在Ubuntu上安装正确的Javascript运行时是此问题的正确答案。
M. Scott Ford

Answers:


436

Ubuntu用户

我在Ubuntu 11.04上遇到类似问题。安装Node.js可以修复它。

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

sudo apt-get install nodejs

这样可以解决问题。


CentOS / RedHat用户

sudo yum install nodejs

1
尝试了。没运气。我想知道这是rvm冲突还是什么。其他人建议的所有内容对我都不起作用。
srboisvert,2011年

76
gem'execjs'gem'therubyracer'比这是一个更好的解决方案。
dwaynemac 2011年

26
由于内存的使用,Heroku现在强烈劝阻 therubyracer。我按照这个答案在我的开发机器上安装了nodejs,并将therubyracer从我的gemfile中取出。另请参见stackoverflow.com/questions/7092107/…
马克·贝里

11
@dwaynemac我不同意。我宁愿运行时作为OS库存在(默认情况下与Mac和Windows一样),而不是在依赖项列表中添加另一个gem。
威廉·丹尼斯

1
似乎therubyracer和execjs会导致heroku部署出现问题,除非我错过了其他修改内容。这是首选的解决方案。
Sturm

445

只需在您的gem文件中添加ExecJSRuby Racer,然后运行即可bundle install

gem 'execjs'

gem 'therubyracer'

之后一切都会好起来的。


6
Rails 3.1rc4和Ubuntu 11.04(对Rails 3.1的首次尝试)对我有用。出现错误时,我试图生成一个脚手架。仍然很奇怪,Rails 3.1已被“打破”了。
wonderfulthunk

35
对于Rails 3.1 RC 6,您只需指定gem 'therubyracer'
Amree,2011年

5
在创建新应用程序时,是否有这些gems包含在默认Gemfile中?
理查德·福塞特

2
这比安装node.js更好。如果要部署到远程服务器或与其他开发人员共享应用程序,那么让每个人都安装node.js会比仅运行捆绑包安装要痛苦得多,无论如何他们都会这样做。
jdkealy 2011年

19
由于内存的使用,Heroku现在强烈劝阻 therubyracer。我在开发机器(github.com/joyent/node/wiki/…)上安装了nodejs,并从我的gemfile中删除了therubyracer。另请参见stackoverflow.com/questions/7092107/…
马克·贝里

77

在您的Gem文件中,写

gem 'execjs'
gem 'therubyracer'

然后运行

bundle install

一切对我来说都很好:)


9
你并不需要添加“execjs”
miguelSantirso

是乌拉圭回合中轨3.2.1您有权使用仅gem'therubyracer”
马尼什nautiyal

谢谢@manish nautiyal和@ Peter Mortensen。它对我
有用

48

我有一个类似的问题:我的Rails 3.1应用程序在Windows上运行良好,但在Linux上运行时却遇到了与OP相同的错误。在两个平台上都对我有用的修复是在我的计算机上添加以下内容Gemfile

gem 'therubyracer', :platforms => :ruby

诀窍是知道:platforms => :ruby实际上意味着仅将此宝石与“ C Ruby(MRI)或Rubinius一起使用,而不能与Windows一起使用”。

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

仅供参考:Windows具有execjs可以定位的内置JavaScript引擎。在Linux上没有内置功能,尽管可以安装多个内置功能。 therubyracer是其中之一。其他列在execjs README.md中


谢谢,此人在我的Ubuntu Oneiric上使用ruby 1.9.3和Rails 3.2.1的rvm安装对我进行了修复
Yashima

先生非常感谢您!
DaTroop

我在安装了node.js的CentOS服务器上遇到了错误。这让我过去了。谢谢!
ncherro

36

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

gem 'therubyracer'

然后捆绑新的依赖项:

$ bundle install

还添加的Gemfile宝石'execjs'
Bijendra

6
execjs现在已经包含在rails中。仅在候选发布期间也需要它。
JDutil 2011年

16

另一种方法是不包含您没有的东西的gem组捆绑。

这样:

bundle install --without assets

您当然不必修改Gemfile,前提是您当然不需要做资产链工作-通常适用于非开发环境。Bundle会记住您在.bundle / config文件中的“ --without”设置。


最佳答案。适用于Rails版本3.2.3
Frantzdy Romain

1
太好了,而且这样简单的修复。Heroku网站上说,不再需要RubyRacer(带有Cedar堆栈),所以我为为什么我的程序突然不在本地运行而感到困惑。这成功了。
Mike Blyth


6

对于Amazon Linux(AMI):

sudo yum install nodejs npm --enablerepo=epel

1
谢谢,这应该是一个更高的水平
David Mauricio

这对于使capistrano部署在AWS标准linux发行版上正常工作至关重要。
jjk


4

我有同样的错误,但仅在我的登台服务器上而不在生产环境上。在两个环境中都已经安装了nodejs。

通过输入:

which node

我发现该节点命令位于生产中的/ usr / bin / node,但在升级中为/ usr / local / bin / node。

在临时创建符号链接后,即:

sudo ln -s /usr/local/bin/node /usr/bin/node

然后,该应用程序在分阶段工作。

没有大惊小怪。


就像魅力!一个忠告:我根据需要进行符号链接nodejs
拉斐尔戈麦斯旧金山

3

不要使用RubyRacer,因为它对内存不利。按照某些人的建议安装Node.js是一个更好的主意。

ExecJs Library可以使用的可用运行时列表也记录了Node.js的使用

https://github.com/sstephenson/execjs

因此,与使用RubyRacer相比,Node.js并不是一个过大的解决方案,并且是更好的解决方案。



0

当我开始在Ruby 1.9.3中使用rbenv时遇到了这个问题,因为我的系统ruby是1.8.7。这两个地方都安装了gem,但是出于某种原因,rails脚本没有将其安装。但是,在Gemfile中添加“ execjs”和“ therubyracer”可以达到目的。



0

尝试使用Ubuntu 18.04,Ruby 2.6。*,Rails 5和RubyMine 2019.1.1在RubyMine中进行调试,我遇到了同一问题。

要解决此问题,我取消了注释mini_racerGemfile,然后运行bundle

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

改成:

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby

0

node通过nvm安装并在与Capistrano一起部署时遇到此问题。Capistrano不会自动加载nvm,因为它非交互式运行。

要解决此问题,只需将nvm添加到您的行~/.bashrc的顶部。该文件将如下所示:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.