当通过 NVM 安装 NPM 时,Capistrano 部署失败并出现 react_on_rails

Posted

技术标签:

【中文标题】当通过 NVM 安装 NPM 时,Capistrano 部署失败并出现 react_on_rails【英文标题】:Capistrano deploy fails with react_on_rails when NPM is installed via NVM 【发布时间】:2017-05-01 16:25:24 【问题描述】:

失败的命令cd client && npm run build:production来自https://github.com/shakacode/react_on_rails/blob/master/lib/tasks/assets.rake

当使用capistrano-npmcapistrano-nvm 时,它会使用这些内容创建/tmp/my_app_name/nvm-exec.sh,并使用它在根rails 应用程序中为package.json 运行npm install。但它不用于为 React 客户端运行命令。

#!/bin/bash -e
source "$HOME/.nvm/nvm.sh"
nvm use $NODE_VERSION
exec "$@"

这是输出:

cap production deploy
rvm 1.27.0 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
ruby-2.3.1
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
00:00 nvm:wrapper
      01 mkdir -p /tmp/rails_cap_deploy/
    ✔ 01 ubuntu@myserver.com 0.034s
      Uploading /tmp/my_app_name/nvm-exec.sh 100.0%
... 
...
00:16 npm:install
      01 /tmp/my_app_name/nvm-exec.sh npm install --production --silent --no-progress
      01 Now using node v6.9.2 (npm v3.10.9)
    ✔ 01 ubuntu@myserver.com 4.370s
00:20 deploy:assets:precompile
      01 ~/.rvm/bin/rvm default do bundle exec rake assets:precompile
      01 cd client && npm run build:production
      01
      01 sh: 1:
      01 npm: not found
      01
      01 rake aborted!
      01 Command failed with status (127): [cd client && npm run build:production...]
      01 /opt/my_app_name/stg/shared/bundle/ruby/2.3.0/gems/react_on_rails-6.3.2/lib/tasks/assets.rake:33:in `block (3 levels) in <top (required)>'
      01 /opt/my_app_name/stg/shared/bundle/ruby/2.3.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
      ...
      01 Tasks: TOP => assets:precompile => react_on_rails:assets:compile_environment => react_on_rails:assets:webpack
      01 (See full trace by running task with --trace)
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as ubuntu@myserver.com: rake exit status: 1
rake stdout: Nothing written
rake stderr: cd client && npm run build:production
sh: 1: npm: not found
rake aborted!
Command failed with status (127): [cd client && npm run build:production...]

这是我的依赖项:

Ubuntu 16.04
rvm 1.27.0
ruby-2.3.1
NPM - 3.10.9
NODE - v6.9.2
NVM - 0.32.1

Gems:
rails (5.0.0.1)
react_on_rails (6.3.2)
capistrano (3.7.0)
capistrano-npm (1.0.2)
capistrano-nvm (0.0.6)
capistrano-passenger (0.2.0)
capistrano-rails (1.2.0)
capistrano-bundler (~> 1.1)
capistrano-rvm (0.1.2)

Capfile:
require 'capistrano/npm'
require 'capistrano/nvm'

【问题讨论】:

嘿,你修好了吗?我正在尝试通过 Capistrano 部署运行 React on Rails,但我真的不明白我应该做什么^^" 【参考方案1】:

这是我“修复”它的方法。在 react_on_rails 使用的 assets.rake 中,我修改了 webpack 任务。

  desc "Compile assets with webpack"
  task :webpack do
    # => prefix commands with /tmp/amplo/nvm-exec.sh on AWS servers
    # => http://***.com/questions/41174807/capistrano-deploy-fails-with-react-on-rails-when-npm-is-installed-via-nvm
    nvm_prefix = '/tmp/amplo/nvm-exec.sh' if File.exist?('/tmp/amplo/nvm-exec.sh')
    sh "cd client && #nvm_prefix npm install"
    sh "cd client && #nvm_prefix npm run build:client"
    sh "cd client && #nvm_prefix npm run build:server"
  end

assets.rake 文件之前包含在我的应用程序中,但更高版本的 react_on_rails 不会自动将此文件复制到 lib\tasks 中

【讨论】:

以上是关于当通过 NVM 安装 NPM 时,Capistrano 部署失败并出现 react_on_rails的主要内容,如果未能解决你的问题,请参考以下文章

npm 是使用 nvm 安装的,但 IntelliJ 不知道它

NVM:npm install -g 一直使用错误的节点版本

使用 nvm 管理不同版本的 node 与 npm

nvmnodenpm安装以及pycharm配置eslint

npm install 问题解决(nvm安装与使用)

npm install 问题解决(nvm安装与使用)