【问题标题】:Capistrano can't find a JavaScript runtimeCapistrano 找不到 JavaScript 运行时
【发布时间】:2011-12-30 00:25:23
【问题描述】:

Capistrano 部署到带有 RVM 和 gemsets 的服务器时遇到问题

executing `deploy:assets:precompile'
* executing "cd /var/app/releases/20111229233555 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
*** [err ::] rake aborted!
*** [err ::] Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
*** [deploy:update_code] rolling back
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell '1.9.2@mygemset' -c 'cd /var/app/releases/20111229234715 && rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile'"

这是我的 Capfile

  $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
  require 'rvm/capistrano'
  set :rvm_bin_path, "$HOME/.rvm/bin"
  set :rvm_ruby_string, '1.9.2@mygemset'
  set :rvm_type, :user
  load 'deploy/assets'

当我以 Capistrano 使用的同一用户身份登录时,执行失败的命令没有任何问题。

Capistrano 似乎正在使用其他环境。

这是我的~/.rvmrc 文件:

   rvm_gemset_create_on_use_flag=1 rvm_trust_rvmrcs_flag=1

有没有办法在执行时检查使用了哪个 ruby​​ 和 gemset?

node.js 和 V8 已安装在系统上,所有需要的 gem 都在 Gemfile 中:

这是我的rvm info

   ruby:
    interpreter:  "ruby"
    version:      "1.9.2p290"
    date:         "2011-07-09"
    platform:     "x86_64-linux"
    patchlevel:   "2011-07-09 revision 32553"
    full_version: "ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]"

  homes:
    gem:          "/home/capistrano/.rvm/gems/ruby-1.9.2-p290@mygemset"
    ruby:         "/home/capistrano/.rvm/rubies/ruby-1.9.2-p290"

  binaries:
    ruby:         "/home/capistrano/.rvm/rubies/ruby-1.9.2-p290/bin/ruby"
    irb:          "/home/capistrano/.rvm/rubies/ruby-1.9.2-p290/bin/irb"
    gem:          "/home/capistrano/.rvm/rubies/ruby-1.9.2-p290/bin/gem"
    rake:         "/home/capistrano/.rvm/gems/ruby-1.9.2-p290@mygemset/bin/rake"

【问题讨论】:

  • 这些问题通常与 capistrano 未设置 PATH 变量有关。考虑在 rake 命令的开头添加一个 PATH="/path/to/v8:$PATH" 前缀以进行调试。
  • execjs 可能正在寻找 node 二进制文件。感谢您为我指明正确的方向!
  • Windows 上开发的用户应该read this Gist 我写过关于 Capistrano 和“找不到 JavaScript 运行时”的文章。希望这会为您节省很多时间。

标签: ruby-on-rails-3 deployment rvm capistrano


【解决方案1】:

deploy.rb 中设置 PATH 解决了这个问题:

default_environment['PATH'] = "/usr/local/bin:/usr/bin:/bin:/opt/bin:$PATH"

这是一个Gentoo发行版,使用cap deployPATH var似乎是空的,所以我复制了服务器PATH的内容,现在它可以工作了

【讨论】:

    【解决方案2】:

    当我在服务器上安装 nodejs(使用 apt-get)后,这个问题就解决了。正如我在this Stackoverflow answer 中所说,这是最实用的选择,因为您不需要在 Gemfile 中包含任何依赖项。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 2011-10-28
      • 2014-12-10
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2014-06-01
      • 2011-09-11
      相关资源
      最近更新 更多