【问题标题】:ExecJS and could not find a JavaScript runtimeExecJS 并且找不到 JavaScript 运行时
【发布时间】:2011-09-11 01:22:54
【问题描述】:

我正在尝试使用 Mongoid / Devise Rails 3.1 template(Mongoid 和 Devise),但我不断收到错误消息,指出 ExecJS 找不到JavaScript 运行时。当我没有安装任何东西时,这很公平,但我尝试安装Node.js、Mustang 和Ruby Racer,但没有任何效果。

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

我需要做什么才能让它工作?

【问题讨论】:

  • 顺便说一句 - 我正在使用 ubuntu 业力。
  • 你真的应该考虑改变答案。 Node.js 的答案不如 execjs/rubyracer。
  • rubyracer 有其他问题。如果可以避免,Heroku 不再建议将其包含在您的 Gemfile 中。 devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer 我认为在 Ubuntu 上安装适当的 Javascript 运行时是这个问题的正确答案。

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


【解决方案1】:

只需将ExecJS 和Ruby Racer 添加到您的gem 文件中,然后运行bundle install。

gem 'execjs'

gem 'therubyracer'

之后一切都会好起来的。

【讨论】:

  • 这对我有用,rails 3.1rc4 和 Ubuntu 11.04(我第一次尝试使用 rails 3.1)。当我得到错误时,我试图生成一个脚手架。 Rails 3.1 开箱即用,仍然很糟糕。
  • 对于 Rails 3.1 RC 6,您只需要指定 gem 'therubyracer'
  • 在创建新应用程序时是否将这些 gem 包含在默认 Gemfile 中?
  • 这是一个比安装 node.js 更好的解决方案。如果您要部署到远程服务器或与其他开发人员共享应用程序,那么让每个人都安装 node.js 比只运行捆绑安装要痛苦得多,无论如何他们都会这样做。
  • Heroku 现在是 strongly discouraging therubyracer 由于内存使用。我在我的开发机器(github.com/joyent/node/wiki/…)上安装了 nodejs,并从我的 gemfile 中取出了 therubyracer。另见stackoverflow.com/questions/7092107/…。
【解决方案2】:

Ubuntu 用户

我使用的是 Ubuntu 11.04 并且遇到了类似的问题。 Installing Node.js 已修复。

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

sudo apt-get install nodejs

这样就可以解决问题了。


CentOS/RedHat 用户

sudo yum install nodejs

【讨论】:

  • 试过了。没有运气。我想知道这是一个rvm冲突还是什么。其他人建议的一切都对我不起作用。
  • gem 'execjs' gem 'therubyracer' 这是一个比这个更好的解决方案。
  • Heroku 现在是 strongly discouraging therubyracer 由于内存使用。我根据这个答案在我的开发机器上安装了 nodejs,并将 therubyracer 从我的 gemfile 中取出。另见stackoverflow.com/questions/7092107/…。
  • @dwaynemac 我不同意。我宁愿运行时作为 OS 库存在(默认情况下与 Mac 和 Windows 一样),而不是在依赖列表中添加另一个 gem。
  • 似乎 therubyracer 和 execjs 导致 heroku 部署出现问题,除非我错过了其他修改的内容。这是首选的解决方案。
【解决方案3】:

在您的 Gem 文件中,写入

gem 'execjs'
gem 'therubyracer'

然后运行

bundle install

对我来说一切都很好:)

【讨论】:

  • 你不需要添加'execjs'
  • 是的,你在 rails 3.2.1 中你只需要使用 gem'therubyracer'
  • 感谢@manish nautiyal 和@Peter Mortensen。它对我有用
【解决方案4】:

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

gem 'therubyracer', :platforms => :ruby

诀窍在于知道:platforms => :ruby 实际上意味着只能将此 gem 用于“C Ruby (MRI) 或 Rubinius,但不能用于 Windows。”

:platforms 的其他可能值在the bundler man page 中进行了描述。

仅供参考:Windows 有一个内置的 JavaScript 引擎,execjs 可以找到它。在 Linux 上没有内置的,尽管可以安装几个可用的。 therubyracer 就是其中之一。其他列在execjsREADME.md。

【讨论】:

  • 谢谢,这个使用 ruby​​ 1.9.3 和 Rails 3.2.1 的 rvm 安装在 Ubuntu Oneiric 上为我修复了这个问题
  • 我在安装了 node.js 的 CentOS 服务器上遇到了错误。这让我过去了。谢谢!
  • bundler gemfile 的新手册页:bundler.io/v2.2/man/gemfile.5.html#PLATFORMS
【解决方案5】:

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

gem 'therubyracer'

然后捆绑你的新依赖:

$ bundle install

【讨论】:

  • 还在 Gemfile 中添加 gem 'execjs'
  • execjs 现在已经包含在 rails 中了。仅在候选发布期间也需要它。
【解决方案6】:

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

这样做:

bundle install --without assets

您根本不必修改 Gemfile,当然前提是您没有在做资产链的东西——这通常适用于非开发环境。 Bundle 会记住 .bundle/config 文件中的“--without”设置。

【讨论】:

  • 最佳答案。适用于 Rails 版本 3.2.3
  • 这很棒,而且解决起来很简单。 Heroku 网站说不再需要 RubyRacer(使用 Cedar 堆栈),所以我很困惑为什么我的程序突然没有在本地运行。这成功了。
【解决方案7】:

在你的 gem 文件中添加以下 gem

gem 'therubyracer'
gem 'execjs'

然后运行

bundle install

你完成了:)

【讨论】:

    【解决方案8】:

    对于亚马逊 linux(AMI):

    sudo yum install nodejs npm --enablerepo=epel
    

    【讨论】:

    • 谢谢,这应该是更高级别的
    • 这对于让 capistrano 部署在 AWS 标准 linux 发行版上工作至关重要。
    【解决方案9】:

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

    通过输入:

    which node
    

    我发现 node 命令位于:/usr/bin/node on production 但是:/usr/local/bin/node 在暂存中。

    在暂存上创建符号链接后,即:

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

    然后应用程序在暂存中工作。

    不要大惊小怪。

    【讨论】:

    • 像魅力一样工作!一个建议:我还需要为nodejs 制作符号链接
    • 轰隆隆。在 2021 年仍然是一个很好的答案。荣誉。就我而言,我必须为 NVM 进行 simlink,但过程是相同的。
    【解决方案10】:

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

    【讨论】:

    • 如何将 nodejs 添加到 gemfile 中?我没有找到 nodejs gem。
    【解决方案11】:

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

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

    https://github.com/sstephenson/execjs

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

    【讨论】:

      【解决方案12】:

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

      【讨论】:

        【解决方案13】:

        我通过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
        

        【讨论】:

          【解决方案14】:

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

          【讨论】:

            【解决方案15】:

            在您的 gem 文件中 取消注释此行。

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

            然后运行 捆绑安装

            你已经准备好工作了。 :)

            【讨论】:

              【解决方案16】:

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

              为了解决这个问题,我取消了Gemfile 中的mini_racer 行的注释,然后运行了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
              

              【讨论】:

                猜你喜欢
                • 2014-12-10
                • 2012-03-01
                • 1970-01-01
                • 2011-12-24
                • 2021-08-02
                • 2015-01-09
                • 2023-01-31
                • 1970-01-01
                相关资源
                最近更新 更多