chm*_*ich 2 capistrano ruby-on-rails node.js
有问题:Yarn requires Node.js 4.0 or higher to be installed
通过 ssh 进入远程服务器,我有:
\npasswords@meet:/srv/passwords$ yarn -v\n1.22.5\npasswords@meet:/srv/passwords$ node -v\nv16.9.1\npasswords@meet:/srv/passwords$\nRun Code Online (Sandbox Code Playgroud)\nNode是由nvm安装的。另外,我让节点使用 16.9.1,这没有改变任何东西。通过 ssh(登录外壳)它工作正常。
\n宝石文件:
\ngroup :development, :deploy do\n gem 'capistrano', '~> 3.14', require: false\n gem 'capistrano-faster-assets'\n gem 'capistrano-passenger'\n gem 'capistrano-rails', '~> 1.6', require: false\n gem 'capistrano-rake', require: false\n gem 'capistrano-rvm'\n gem 'capistrano-resque', require: false\nend\nRun Code Online (Sandbox Code Playgroud)\n错误
\nrake stderr:Yarn 需要安装 Node.js 4.0 或更高版本
\n我做了什么
\n我添加到deploy/staging.rb
\ntask :debugs do\n on roles(:app), in: :parallel do |server|\n on "passwords@#{server.hostname}" do\n #execute :node, '-v'\n execute :echo, '$PATH'\n execute :pwd\n end\n end\nend\nbefore :deploy, :debugs\nRun Code Online (Sandbox Code Playgroud)\n因此,从这里开始,在部署时,它不会打印出与我在 ssh 上看到的相同的 PATH,并且缺少该部分,该部分将指向我的 nvm-node 二进制文件。但是,通过 pwd,我发现它可以在远程服务器主目录上运行。
\n那么,capistrano 如何在远程 shell 上工作?\n它似乎没有执行.bashrc将 nvm / node-bin 部分导出到 PATH 的命令
我需要配置什么吗?
\n下面是输出cap staging deploy
谢谢!\n克里斯
\nMacBook: ~/projects-priv/passwords.rails$ cap staging deploy\nrvm 1.29.12-next (master) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]\nruby-2.7.2\nruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]\n00:00 debugs\n 01 echo $PATH\n 01 /usr/local/bin:/usr/bin:/bin:/usr/games\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.245s\n 02 pwd\n 02 /home/passwords\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.239s\n00:00 git:wrapper\n 01 mkdir -p /tmp\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.228s\n Uploading /tmp/git-ssh-d21e8dbb787dbfd49298.sh 100.0%\n 02 chmod 700 /tmp/git-ssh-d21e8dbb787dbfd49298.sh\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.242s\n00:01 git:check\n 01 git ls-remote repo-get@sedlmair.ch:/repos/sedl/passwords.git HEAD\n 01 8cf4b5d57543eccf3737cd670519a9deac5592b8 HEAD\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.546s\n00:02 deploy:check:directories\n 01 mkdir -p /srv/passwords-staging/shared /srv/passwords-staging/releases\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.199s\n00:02 deploy:check:linked_dirs\n 01 mkdir -p /srv/passwords-staging/shared/log /srv/passwords-staging/shared/backup /srv/passwords-staging/shared/tmp/pids /srv/passwords-staging/shared/tmp/cache /srv/passwords-staging/shared/tm\xe2\x80\xa6\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.232s\n00:02 deploy:check:make_linked_dirs\n 01 mkdir -p /srv/passwords-staging/shared/config /srv/passwords-staging/shared/config/credentials\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.230s\n00:04 git:clone\n The repository mirror is at /srv/passwords-staging/repo\n00:04 git:update\n 01 git remote set-url origin repo-get@sedlmair.ch:/repos/sedl/passwords.git\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.237s\n 02 git remote update --prune\n 02 Fetching origin\n 02 From sedlmair.ch:/repos/sedl/passwords\n 02 7713138..8cf4b5d master -> master\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.589s\n00:05 git:create_release\n 01 mkdir -p /srv/passwords-staging/releases/20210917211320\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.251s\n 02 git archive master | /usr/bin/env tar -x -f - -C /srv/passwords-staging/releases/20210917211320\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.263s\n00:06 deploy:set_current_revision\n 01 echo "8cf4b5d57543eccf3737cd670519a9deac5592b8" > REVISION\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.229s\n00:06 deploy:symlink:linked_files\n 01 mkdir -p /srv/passwords-staging/releases/20210917211320/config /srv/passwords-staging/releases/20210917211320/config/credentials\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.232s\n 02 rm /srv/passwords-staging/releases/20210917211320/config/database.yml\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.231s\n 03 ln -s /srv/passwords-staging/shared/config/database.yml /srv/passwords-staging/releases/20210917211320/config/database.yml\n \xe2\x9c\x94 03 passwords@sedlmair.ch 0.229s\n 04 ln -s /srv/passwords-staging/shared/config/secrets.yml /srv/passwords-staging/releases/20210917211320/config/secrets.yml\n \xe2\x9c\x94 04 passwords@sedlmair.ch 0.233s\n 05 ln -s /srv/passwords-staging/shared/config/master.key /srv/passwords-staging/releases/20210917211320/config/master.key\n \xe2\x9c\x94 05 passwords@sedlmair.ch 0.234s\n 06 ln -s /srv/passwords-staging/shared/config/credentials/staging.key /srv/passwords-staging/releases/20210917211320/config/credentials/staging.key\n \xe2\x9c\x94 06 passwords@sedlmair.ch 0.233s\n00:10 deploy:symlink:linked_dirs\n 01 mkdir -p /srv/passwords-staging/releases/20210917211320 /srv/passwords-staging/releases/20210917211320/tmp /srv/passwords-staging/releases/20210917211320/public\n \xe2\x9c\x94 01 passwords@sedlmair.ch 0.236s\n 02 rm -rf /srv/passwords-staging/releases/20210917211320/log\n \xe2\x9c\x94 02 passwords@sedlmair.ch 0.232s\n 03 ln -s /srv/passwords-staging/shared/log /srv/passwords-staging/releases/20210917211320/log\n \xe2\x9c\x94 03 passwords@sedlmair.ch 0.233s\n 04 ln -s /srv/passwords-staging/shared/backup /srv/passwords-staging/releases/20210917211320/backup\n \xe2\x9c\x94 04 passwords@sedlmair.ch 0.235s\n 05 rm -rf /srv/passwords-staging/releases/20210917211320/tmp/pids\n \xe2\x9c\x94 05 passwords@sedlmair.ch 0.230s\n 06 ln -s /srv/passwords-staging/shared/tmp/pids /srv/passwords-staging/releases/20210917211320/tmp/pids\n \xe2\x9c\x94 06 passwords@sedlmair.ch 0.234s\n 07 ln -s /srv/passwords-staging/shared/tmp/cache /srv/passwords-staging/releases/20210917211320/tmp/cache\n \xe2\x9c\x94 07 passwords@sedlmair.ch 0.227s\n 08 ln -s /srv/passwords-staging/shared/tmp/sockets /srv/passwords-staging/releases/20210917211320/tmp/sockets\n \xe2\x9c\x94 08 passwords@sedlmair.ch 0.230s\n 09 ln -s /srv/passwords-staging/shared/public/uploads /srv/passwords-staging/releases/20210917211320/public/uploads\n \xe2\x9c\x94 09 passwords@sedlmair.ch 0.232s\n 10 ln -s /srv/passwords-staging/shared/public/packs /srv/passwords-staging/releases/20210917211320/public/packs\n \xe2\x9c\x94 10 passwords@sedlmair.ch 0.232s\n 11 ln -s /srv/passwords-staging/shared/public/assets /srv/passwords-staging/releases/20210917211320/public/assets\n \xe2\x9c\x94 11 passwords@sedlmair.ch 0.234s\n00:16 bundler:config\n 01 ~/.rvm/bin/rvm 2.7.2 do bundle config --local deployment true\n \xe2\x9c\x94 01 passwords@sedlmair.ch 1.017s\n 02 ~/.rvm/bin/rvm 2.7.2 do bundle config --local path /srv/passwords-staging/shared/bundle\n \xe2\x9c\x94 02 passwords@sedlmair.ch 1.074s\n 03 ~/.rvm/bin/rvm 2.7.2 do bundle config --local without development\\ test\n \xe2\x9c\x94 03 passwords@sedlmair.ch 1.017s\n00:21 bundler:install\n The Gemfile's dependencies are satisfied, skipping installation\n00:21 deploy:assets:precompile\n 01 ls /srv/passwords-staging/releases/20210917211125/assets_manifest_backup\n 01 ls: cannot access '/srv/passwords-staging/releases/20210917211125/assets_manifest_backup': No such file or directory\n 02 ~/.rvm/bin/rvm 2.7.2 do bundle exec rake assets:precompile\n 02 Yarn requires Node.js 4.0 or higher to be installed.\n#<Thread:0x00007ff22d193e40 /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):\nTraceback (most recent call last):\n 13: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'\n 12: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `run'\n 11: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `instance_exec'\n 10: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:17:in `block (4 levels) in <top (required)>'\n 9: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:92:in `within'\n 8: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:18:in `block (5 levels) in <top (required)>'\n 7: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:100:in `with'\n 6: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:29:in `block (6 levels) in <top (required)>'\n 5: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:80:in `execute'\n 4: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `create_command_and_execute'\n 3: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `tap'\n 2: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `block in create_command_and_execute'\n 1: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/netssh.rb:170:in `execute_command'\n/Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/command.rb:97:in `exit_status=': ls exit status: 2 (SSHKit::Command::Failed)\nls stdout: Nothing written\nls stderr: ls: cannot access '/srv/passwords-staging/releases/20210917211125/assets_manifest_backup': No such file or directory\n 8: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'\n 7: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `run'\n 6: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `instance_exec'\n 5: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:17:in `block (4 levels) in <top (required)>'\n 4: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:92:in `within'\n 3: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:18:in `block (5 levels) in <top (required)>'\n 2: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:100:in `with'\n 1: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:29:in `block (6 levels) in <top (required)>'\n/Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:29:in `rescue in block (6 levels) in <top (required)>': PrecompileRequired (PrecompileRequired)\n 14: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'\n 13: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `run'\n 12: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:31:in `instance_exec'\n 11: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:17:in `block (4 levels) in <top (required)>'\n 10: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:92:in `within'\n 9: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:18:in `block (5 levels) in <top (required)>'\n 8: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:100:in `with'\n 7: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:19:in `block (6 levels) in <top (required)>'\n 6: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/capistrano-faster-assets-1.1.0/lib/capistrano/tasks/faster_assets.rake:68:in `rescue in block (6 levels) in <top (required)>'\n 5: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:80:in `execute'\n 4: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `create_command_and_execute'\n 3: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `tap'\n 2: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/abstract.rb:148:in `block in create_command_and_execute'\n 1: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/backends/netssh.rb:170:in `execute_command'\n/Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/command.rb:97:in `exit_status=': rake exit status: 1 (SSHKit::Command::Failed)\nrake stdout: Nothing written\nrake stderr: Yarn requires Node.js 4.0 or higher to be installed.\n 1: from /Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'\n/Users/dev/.rvm/gems/ruby-2.7.2/gems/sshkit-1.21.2/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as passwords@sedlmair.ch: rake exit status: 1 (SSHKit::Runner::ExecuteError)\nrake stdout: Nothing written\nrake stderr: Yarn requires Node.js 4.0 or higher to be installed.\n(Backtrace restricted to imported tasks)\ncap aborted!\nSSHKit::Runner::ExecuteError: Exception while executing as passwords@sedlmair.ch: rake exit status: 1\nrake stdout: Nothing written\nrake stderr: Yarn requires Node.js 4.0 or higher to be installed.\n\n\nCaused by:\nSSHKit::Command::Failed: rake exit status: 1\nrake stdout: Nothing written\nrake stderr: Yarn requires Node.js 4.0 or higher to be installed.\n\n\nCaused by:\nPrecompileRequired: PrecompileRequired\n\n\nCaused by:\nSSHKit::Command::Failed: ls exit status: 2\nls stdout: Nothing written\nls stderr: ls: cannot access '/srv/passwords-staging/releases/20210917211125/assets_manifest_backup': No such file or directory\n\nTasks: TOP => deploy:assets:precompile\n(See full trace by running task with --trace)\nThe deploy has failed with an error: Exception while executing as passwords@sedlmair.ch: rake exit status: 1\nrake stdout: Nothing written\nrake stderr: Yarn requires Node.js 4.0 or higher to be installed.\n\n\n** DEPLOY FAILED\n** Refer to log/capistrano.log for details. Here are the last 20 lines:\n\n\n DEBUG [5db32273] Running ~/.rvm/bin/rvm 2.7.2 do bundle check as passwords@sedlmair.ch\n\n DEBUG [5db32273] Command: cd /srv/passwords-staging/releases/20210917211320 && ~/.rvm/bin/rvm 2.7.2 do bundle check\n\n DEBUG [5db32273] The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.\n\n DEBUG [5db32273] The Gemfile's dependencies are satisfied\n\n DEBUG [5db32273] Finished in 1.177 seconds with exit status 0 (successful).\n\n INFO The Gemfile's dependencies are satisfied, skipping installation\n\n DEBUG [01c835ec] Running if test ! -d /srv/passwords-staging/releases/20210917211320; then echo "Directory does not exist '/srv/passwords-staging/releases/20210917211320'" 1>&2; false; fi as passwords@sedlmair.ch\n\n DEBUG [01c835ec] Command: if test ! -d /srv/passwords-staging/releases/20210917211320; then echo "Directory does not exist '/srv/passwords-staging/releases/20210917211320'" 1>&2; false; fi\n\n DEBUG [01c835ec] Finished in 0.225 seconds with exit status 0 (successful).\n\n DEBUG [17c736a8] Running /usr/bin/env ls -xr /srv/passwords-staging/releases as passwords@sedlmair.ch\n\n DEBUG [17c736a8] Command: cd /srv/passwords-staging/releases/20210917211320 && ( export RAILS_ENV="staging" ; /usr/bin/env ls -xr /srv/passwords-staging/releases )\n\n DEBUG [17c736a8] 20210917211320 20210917211125 20210917124038 20210917123113 20210917123012\n\n20210917122443 20210917115628 20210917115208 20210917114621\n\n DEBUG [17c736a8] Finished in 0.239 seconds with exit status 0 (successful).\n\n INFO [e1420513] Running /usr/bin/env ls /srv/passwords-staging/releases/20210917211125/assets_manifest_backup as passwords@sedlmair.ch\n\n DEBUG [e1420513] Command: cd /srv/passwords-staging/releases/20210917211320 && ( export RAILS_ENV="staging" ; /usr/bin/env ls /srv/passwords-staging/releases/20210917211125/assets_manifest_backup )\n\n DEBUG [e1420513] ls: cannot access '/srv/passwords-staging/releases/20210917211125/assets_manifest_backup': No such file or directory\n\n INFO [02b44f15] Running ~/.rvm/bin/rvm 2.7.2 do bundle exec rake assets:precompile as passwords@sedlmair.ch\n\n DEBUG [02b44f15] Command: cd /srv/passwords-staging/releases/20210917211320 && ( export RAILS_ENV="staging" ; ~/.rvm/bin/rvm 2.7.2 do bundle exec rake assets:precompile )\n\n DEBUG [02b44f15] Yarn requires Node.js 4.0 or higher to be installed.\n\nMacBook: ~/projects-priv/passwords.rails$ \nRun Code Online (Sandbox Code Playgroud)\n
找到了解决办法
它在这张票中,来自 Delameko 的回答
在 中.bashrc,我将导出 PATH 的 nvm 部分移动到顶部,位于如果不是交互式 shell 则返回的部分之上
现在纱线可以工作了。
# load nvm always
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
#export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Run Code Online (Sandbox Code Playgroud)