ExecJS并找不到JavaScript运行时

时间:2011-06-08 16:47:35

标签: ruby-on-rails-3.1 execjs javascript

我正在尝试使用Mongoid / Devise Rails 3.1 template Mongoid Devise ),并且我一直收到错误说明ExecJS无法找到JavaScript运行时。当我没有安装任何内容时,我已经尝试安装了Node.jsMustangRuby Racer,但没有任何效果。

我找不到JavaScript运行时。请参阅sstephenson/ExecJS(GitHub)以获取可用运行时列表(ExecJS::RuntimeUnavailable)。

我需要做些什么来实现这个目标?

16 个答案:

答案 0 :(得分:446)

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

gem 'execjs'

gem 'therubyracer'

之后一切都应该没问题。

答案 1 :(得分:422)

Ubuntu用户

我在使用Ubuntu 11.04并遇到类似问题。 Installing Node.js修正了它。

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

sudo apt-get install nodejs

这将解决问题。


CentOS / RedHat用户

sudo yum install nodejs

答案 2 :(得分:76)

在你的Gem文件中,写下

gem 'execjs'
gem 'therubyracer'

然后运行

bundle install

一切都适合我:)

答案 3 :(得分:47)

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

gem 'therubyracer', :platforms => :ruby

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

:platforms中描述了execjs的其他可能值。

仅供参考:Windows有一个therubyracer可以找到的内置JavaScript引擎。在Linux上虽然有几个可用的安装,但没有内置。 execjs就是其中之一。其他人列在{{1}} the bundler man page

答案 4 :(得分:36)

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

gem 'therubyracer'

然后捆绑新的依赖项:

$ bundle install

答案 5 :(得分:16)

另一种方法是在没有包含你没有的东西的宝石组的情况下捆绑。

所以:

bundle install --without assets

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

答案 6 :(得分:6)

在宝石文件中添加以下宝石

gem 'therubyracer'
gem 'execjs'

并运行

bundle install

你完成了:)

答案 7 :(得分:5)

对于amazon linux(AMI):

public void OpenSpeaker() {
    try {
        if (!audioManager.isSpeakerphoneOn()) {
            audioManager.setSpeakerphoneOn(true);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void CloseSpeaker() {
    try {
        if (audioManager != null) {
            if (audioManager.isSpeakerphoneOn()) {
                audioManager.setSpeakerphoneOn(false);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 8 :(得分:4)

我曾经将Ruby Racer添加到Gem文件中来修复它。但是,嘿,Node.js有效!

答案 9 :(得分:4)

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

输入:

(Int,Int)

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

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

which node

然后应用程序在分段中工作。

没有大惊小怪。

答案 10 :(得分:3)

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

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

https://github.com/sstephenson/execjs

因此,与使用RubyRacer相比,Node.js并不是一种矫枉过正的解决方案。

答案 11 :(得分:2)

仅供参考,这解决了我的问题...这是一个路径问题: http://forums.freebsd.org/showthread.php?t=35539

答案 12 :(得分:0)

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

答案 13 :(得分:0)

在你的宝石文件中 取消注释这一行。

19#gem'therubyracer',平台:: ruby​​

然后跑 捆绑安装

你准备工作了。 :)

答案 14 :(得分: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

答案 15 :(得分:0)

我通过nvm安装了node,在使用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