【问题标题】:Runnig Rake tasks on production server failes due to ExecJS由于 ExecJS 在生产服务器上运行 Rake 任务失败
【发布时间】:2014-12-09 04:49:36
【问题描述】:

我在 RHEL 6 机器上安装了 Rails 4 应用程序。

生产使用Passenger和Apache2。

最近我一直在尝试使用 When Gem 和 Cron 将 Rake 任务作为计划作业集成到生产中。

每当我尝试在生产环境中运行这些 Rake 任务之一时,都会收到以下错误:

rake aborted!
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.

重要的是要提到机器上安装了 NodeJS。我可以预编译资产,等等。 具体来说,命令node --version 产生:v0.10.31

这是我的堆栈跟踪:

  rake aborted!
    ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/execjs-2.2.1/lib/execjs/runtimes.rb:51:in `autodetect'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/execjs-2.2.1/lib/execjs.rb:5:in `<module:ExecJS>'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/execjs-2.2.1/lib/execjs.rb:4:in `<top (required)>'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:229:in `require'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:229:in `block in require'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:214:in `load_dependency'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/activesupport-4.0.4/lib/active_support/dependencies.rb:229:in `require'
    /var/www/eng_performance/shared/bundle/ruby/2.0.0/gems/uglifier-2.5.3/lib/uglifier.rb:3:in `<top (required)>'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:76:in `require'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:72:in `each'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:72:in `block in require'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:61:in `each'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler/runtime.rb:61:in `require'
    /home/deploy/.rvm/gems/ruby-2.0.0-p481/gems/bundler-1.7.2/lib/bundler.rb:133:in `require'
    /var/www/eng_performance/releases/20141014084554/config/application.rb:7:in `<top (required)>'
    /var/www/eng_performance/releases/20141014084554/Rakefile:4:in `require'
    /var/www/eng_performance/releases/20141014084554/Rakefile:4:in `<top (required)>'
    (See full trace by running task with --trace)

注意: 我已经从源代码编译安装了 NodeJS,因为当我尝试从 repo 安装时,我遇到了这个我不知道如何克服的错误:

Packages skipped because of dependency problems:
    c-ares19-1.9.1-5.el6.3.x86_64 from epel
    http-parser-2.0-4.20121128gitcd01361.el6.x86_64 from epel
    1:libuv-0.10.28-1.el6.x86_64 from epel
    nodejs-0.10.30-1.el6.x86_64 from epel
    1:v8-3.14.5.10-11.el6.x86_64 from epel

【问题讨论】:

  • 你能检查一下gem 'therubyracer' 是否在你的 Gemfile 中没有注释吗?
  • @RMilushev,感谢您的回复。据我了解,不建议使用 therubyracer 来解决性能问题。我发现不止一个这样的线程:rubyracer vs nodejs。你知道这些问题吗?此 gem 的某些新版本是否有任何更改?
  • 我在生产 Debian Linux 服务器上使用 nodejs 的体验很糟糕。它必须以一种非常特殊的方式安装,我们决定依赖therubyracer gem。我不认为有性能问题,因为它是一个 V8 js 机器 Warper,差不多。

标签: javascript ruby-on-rails node.js ruby-on-rails-4 rake


【解决方案1】:

好吧,终于,我能够解决这个问题了:)

事实证明,node.js 的安装并没有什么问题,而是引用了它。

我不知道为什么一开始就改变了,但是following this post 解决了这个问题——即通过添加符号链接ln -s /usr/local/bin/node /usr/bin/node

注意:我很确定符号链接不是最佳做法。如果有人可以提出另一个想法 - 我很乐意听到它..

希望这是我在使用 node.js 时遇到的最后一个错误。 如果发生类似这样的其他错误,rubyracer 将提供出色的备份解决方案。

【讨论】:

  • 当我们可以使用 Web 服务器来提供首先预编译的东西时,为什么我们甚至需要在生产环境中使用 JS 环境,更不用说可能甚至不需要任何 JS 的 rake 任务了。
猜你喜欢
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 2011-09-17
  • 2020-12-30
  • 1970-01-01
  • 2014-01-04
  • 2016-04-17
  • 1970-01-01
相关资源
最近更新 更多