【问题标题】:execJs: 'Could not find a JavaScript runtime' but execjs AND therubyracer are in GemfileexecJs:“找不到 JavaScript 运行时”,但 execjs 和 therubyracer 在 Gemfile 中
【发布时间】:2012-03-01 10:04:20
【问题描述】:

我收到此错误:

rake 中止! 找不到 JavaScript 运行时。见https://github.com/sstephenson/execjs,

我已经花了更多时间搜索谷歌然后我愿意承认。我相信这是一个 execJs 错误。

从所有帖子来看,这是 rails 3.1 的一个非常常见的问题。现在标准的 gems(如咖啡脚本和 sass)现在需要一个 js 运行时。

通过将 gem 'execjs' 和 'therubyracer' 添加到应用程序 Gemfile,然后运行 ​​'bundle update' 和/或 'bundle install' 来解决大多数情况。但不适合我。

我想我很幸运。我在旧版本的 Redhat Linux 4 (2.6.9-101.ELsmp) 上运行 rails 3.1.3/ruby 1.9,而 gcc 是 3.4.6。

其他报告的修复没有帮助,我无法安装 'nodejs'、'johnson' 或 'mustang',其他运行时 execJs 应该定位和使用。他们不会在我的系统上制作/安装。

我需要解决导致 execJs 无法找到“therubyracer”的问题。这是 Gemfile(并且 bundle install 说好的):

source 'http://rubygems.org'

gem 'rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'

gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

这是一个痕迹:

~/rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

开发日志中没有任何有趣的内容。

这里是 execjs 目录:

/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   ruby_racer_runtime.rb  

我也试过 execjs-1.2.13。同样的问题。

如果我在下面评论 execjs.rb,我可以运行 rake 而不会出现错误:

require "execjs/module"
require "execjs/runtimes"

module ExecJS
  self.runtime #||= Runtimes.autodetect
end

但是我没有运行时。

我可以在 runtimes.rb 中看到错误文本的来源:

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

所以问题是,既然我安装了“therubyracer”,为什么runtimes.rb 找不到它? execJs 坏了吗?

这里是'therubyracer':

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9

我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    尝试安装 NodeJS 并重试。

    https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

    NodeJS 应该可以解决这个问题。 你也可以考虑版本

    【讨论】:

      【解决方案2】:

      对于mac,安装节点

      brew install node

      【讨论】:

        【解决方案3】:

        如果你在 ubuntu 上 $ sudo apt-get install nodejs

        尽量不要使用Windows等其他系统进行开发。想想世界上几乎所有的服务器都是 Linux 服务器,所以当你尝试部署那个应用程序时,如果你也在 Linux 或 Unix 环境中开发它会更容易。

        【讨论】:

          【解决方案4】:

          当我生成 rails g 控制器时,我得到了同样的错误。之后,当对 Gemfile(在 rails 4 中)进行以下更改时,一切都很顺利。我所做的更改是

          宝石'execjs'
          宝石'therubyracer',“0.11.4”
          之后,我就可以运行服务器并能够对应用程序执行所有基本操作。

          【讨论】:

            【解决方案5】:

            Ubuntu 用户:

            我遇到了同样的问题,我通过在独立于 gem 的系统上安装 nodejs 来解决它。

            在 ubuntu 上:sudo apt-get install nodejs

            我使用的是 64 位 ubuntu 11.10

            更新: 从下面@Galina 的回答中,我猜想需要最新版本的nodejs, 所以@steve98177你在redhat(或CentOS)盒子上的最佳选择是像@Galina一样从源代码安装,但是你不能在这个盒子上“制作/安装”?,我建议你尝试安装一个fedora rpm (远射)https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager 或者找到另一个 RH/CentOs 盒子(你可以“制作”)并创建你自己的 rpm 并安装在原来的 RH 盒子上(如果 RH 上的旧 glibc 很好用的话)。

            这里的真正问题(恕我直言)是安装依赖于 ruby​​ 环境之外已安装包的 Gems,在安装之前有没有办法知道?宝石或捆绑器的 RFI?


            CentOS/RedHat 用户:

            sudo yum install nodejs
            

            【讨论】:

            • 在 ubuntu 上我不得不 sudo apt-get update 然后 nodejs install 工作。
            • 我在 Ubuntu 12.04- 32 位 ruby​​ 1.9.3p392、rails 3.2.3、gem 1.8.25 上遇到了同样的问题。运行“脚本/rails 控制台”和“脚本/rails 服务器”时收到相同的错误。 sudo apt-get install nodejs 解决了我的问题。
            • 它必须是 Node 吗?我很确定你可以使用其他的,比如 therubyracer、therubyrhino 或 Apple JavaScriptCore。我知道 ExecJS 支持它们。 github.com/sstephenson/execjs
            • 尝试 gem install execjs 支持的任何替代运行时让我无处可去。确实,安装 nodejs 确实有效。远非理想,但它可以让你通过帖子。
            • 我使用的是 ubuntu 14.04。安装nodejs后问题解决。
            【解决方案6】:

            我在使用 RubyMine (6.3.3) 时遇到了这个问题。有一天,我尝试运行我的代码,但它没有工作,并抱怨找不到 JavaScript 运行时。我能够运行rails s。我的解决方法是创建一个新的运行配置。运行配置会损坏似乎真的很奇怪。

            【讨论】:

              【解决方案7】:

              在 Ubuntu 上,我必须 sudo apt-get update 然后 nodejs 安装工作。

              【讨论】:

                【解决方案8】:

                当你创建一个空项目时,这行会在 Gemfile 中被注释掉。只需取消注释并捆绑!

                gem 'therubyracer', :platforms => :ruby
                

                【讨论】:

                • ...和捆绑!到目前为止,这是最简单的答案。
                【解决方案9】:

                在我的例子中,运行bundle 命令就可以了。我相信他们会找到彼此。

                【讨论】:

                  【解决方案10】:

                  添加您创建的文件夹中的 gemfile: 宝石'execjs' 宝石'therubyracer'

                  【讨论】:

                    【解决方案11】:

                    我有几次因为这个错误而拔掉头发。我设法通过重新启动 Apache/Nginx 让它在某个时候消失。

                    所以我以与上述相同的方式修复它,将以下内容添加到 GEM 文件中:

                    gem 'execjs'
                    gem 'therubyracer', :platforms => :ruby
                    

                    然后我删除了我的 gemfile.lock 文件,然后重新运行“捆绑安装”。我才发现“捆绑安装”实际上安装了正确的库等。

                    【讨论】:

                      【解决方案12】:

                      我在我的 Windows 机器上遇到过这种情况,结果发现问题完全不同。我不小心从我的 %PATH% 变量中删除了一些路径。只需重新启动命令提示符即可解决。似乎在其中一个缺失的路径中有一个 JS 运行时。

                      【讨论】:

                      • 我也碰巧从我的windows机器中删除了一些路径,你能提到你是如何添加js路径的
                      • @HussainAkhtarWahid,我没有覆盖我的 autoexec 或其他类似的东西,所以我需要做的就是关闭我的 cmd 会话并重新打开它。
                      • 干得好先生,这是我在尝试设置 Windows ruby​​ 开发环境所需的一切后遇到的问题
                      【解决方案13】:

                      Fedora 用户将无法执行简单的“yum install nodejs”,因为严重的命名和文件放置冲突甚至会阻止此软件包通过 Fedora 存储库提供。

                      显然,至少有一个替代存储库可用于替代构建,但这是两个太多的“替代”,我不愿意使用它——我正在寻找另一种替代方法。

                      【讨论】:

                      • 这在当时可能是正确的,但现在确实可以正常工作(2015 年 12 月)
                      【解决方案14】:

                      我在 ubuntu 12.04 上遇到过类似的问题。 Installing Node.js 已修复。

                      【讨论】:

                        【解决方案15】:

                        我正在使用 Ubuntu 11.10- 32 位和 ruby​​ 1.9.3p194、rails 3.2.3、gem 1.8.24。运行“脚本/rails 控制台”时收到相同的 Javascript 错误。

                        但是执行“sudo apt-get install nodejs”解决了我的问题。

                        【讨论】:

                          【解决方案16】:

                          这是解决问题所需的链接(安装 nodejs):https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

                          【讨论】:

                            【解决方案17】:

                            我遇到了同样的问题。添加 gem 'execjs' 和 'therubyracer' 对我不起作用。 apt-get install nodejs - 也不起作用。我使用的是 64 位 ubuntu 10.04。

                            但这对我有以下帮助: 1. 我创建了空文件夹(例如“java”)。 2. 从我创建的文件夹中的终端开始:

                            $ git clone git://github.com/ry/node.git
                            $ cd node
                            $ ./configure
                            $ make
                            $ sudo make install
                            

                            之后我像往常一样运行“捆绑安装”(从包含 ruby​​&rails 项目的文件夹中)。 问题就解决了。 Ruby 不必重新安装。

                            【讨论】:

                            • 现在尝试此操作的任何人都会收到错误消息。请尝试关注 git clone github.com/nodejs/node
                            【解决方案18】:

                            我在登台服务器上遇到了同样的问题。我在本地开发机器上运行 rake 任务没有任何问题,但是在尝试运行 assets:precompile 时部署到登台服务器失败并出现 “找不到 JavaScript 运行时” 错误消息 耙任务。

                            当然,therubyracer 和 execjs 在我的 Gemfile 中,我使用的是最新版本。我的 Gemfile.lock 文件匹配,我通过运行 bundle show 进一步验证了版本。

                            在 Google 上搜索后,我最终删除了我所有的 gem 并重新安装它们,从而解决了问题。我仍然不知道根本原因是什么,但也许这会对你有所帮助。

                            这是我的环境的样子,顺便说一句:

                            Ubuntu 10.04.3 LTS
                            rbenv
                            Ruby 1.9.2-p290
                            bundler-1.0.21
                            execjs-1.3.0
                            therubyracer-0.9.9
                            

                            【讨论】:

                            • 我在 ubuntu 10.04 上遇到了这个问题。不认为使用 ubuntu 12.04 值得,但我想是的!所以,我认为就我而言,问题在于我编译并重新编译了我的 ruby​​(1.9.3、1.9.2)太多次。我正在重新编译它以查看是否可以修复它。哦,我正在将我的 apt-get 升级到最新版本。
                            【解决方案19】:

                            在你的 gemfile 中添加:

                            gem 'execjs'
                            gem 'therubyracer', :platforms => :ruby
                            

                            更多详情: ExecJS and could not find a JavaScript runtime

                            【讨论】:

                            • 谢谢,但这不起作用。看看这个让 ruby​​rhino 被 execjs 识别的尝试: gem which rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
                            • 也为我工作过,给像我这样的 Rails 初学者注意:Gemfile 在项目文件夹中。
                            • 对于那些对此不起作用的人:首先尝试运行gem install therubyracer。
                            • 对于其他遇到此问题的人,我正在将 Shopify 的 dashing 项目安装到 CentOS 5.8 系统上,并且遇到了 execjs 运行时问题。我将此添加到我的Gemfile 并且它有效。
                            • 好的,很好。但是为什么我们必须这样做呢?每次我在我的 Gemfile 中添加一行时,它必须对个人项目真正有意义,而对于团队项目,这样做甚至更脏,因为这会影响其他人的机器,而问题是特定于环境的。恕我直言,从长远来看,这不是一个很好的解决方案。
                            猜你喜欢
                            • 2014-12-10
                            • 2011-09-11
                            • 1970-01-01
                            • 2011-12-24
                            • 1970-01-01
                            • 1970-01-01
                            • 2012-12-20
                            • 1970-01-01
                            相关资源
                            最近更新 更多