【发布时间】:2016-09-27 03:09:28
【问题描述】:
我在尝试将 ruby 应用程序从存储库推送到远程服务器时遇到 SSHKit::Runner::ExecuteError。
开启
$: bundle exec cap production deploy
我明白了
DEBUG [506a96fd] Running [ -d ~/.rvm ] as deploy@168.257.12.345
DEBUG [506a96fd] Command: [ -d ~/.rvm ]
DEBUG [506a96fd] Finished in 1.496 seconds with exit status 1 (failed).
DEBUG [8e553e85] Running [ -d /usr/local/rvm ] as deploy@168.257.12.345
DEBUG [8e553e85] Command: [ -d /usr/local/rvm ]
DEBUG [8e553e85] Finished in 0.074 seconds with exit status 1 (failed).
DEBUG [d6f82812] Running ~/.rvm/bin/rvm version as deploy@168.257.12.345
DEBUG [d6f82812] Command: ~/.rvm/bin/rvm version
DEBUG [d6f82812] bash: /home/deploy/.rvm/bin/rvm: No such file or directory
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as deploy@168.257.12.345: rvm exit status: 127
rvm stdout: Nothing written
rvm stderr: bash: /home/deploy/.rvm/bin/rvm: No such file or directory
SSHKit::Command::Failed: rvm exit status: 127
rvm stdout: Nothing written
rvm stderr: bash: /home/deploy/.rvm/bin/rvm: No such file or directory
经过数小时的故障排除和在互联网上搜索类似的错误消息后,我想到了以下问题:使用 rvm 在我的本地计算机上安装 ruby 并将应用程序从 repo 推送到安装了 ruby 的远程计算机是否是常见做法与 rbenv。我的想法是“没有这样的文件或目录”错误意味着我的本地安装,基于它在本地的安装方式,正在远程寻找一个 rvm 文件夹,当它没有找到它时它会抱怨。
我的下一步是在本地安装相同的 ruby 版本,使用 rbenv,但其他研究支持 rvm 与 rbenv 不兼容,您应该在使用 rbenv 之前删除所有 rvm 痕迹。两者都安装在我的本地机器上。
是否有一种技巧可以使这项工作无需在本地全面卸载 rvm 以及与之关联的每个 gem,或者我是否按照this answer 中的说明在遥控器上手动创建文件夹?老实说,寻找最干净,最好的做法。非常感谢。
宝石文件
# Added per gorails.com tutuorial @ gorails.com/deploy/ubunt/14.04
gem 'capistrano', '~> 3.4.0'
gem 'capistrano-bundler', '~> 1.1.2'
gem 'capistrano-rails', '~> 1.1.1'
# Add this if you're using rbenv
# gem 'capistrano-rbenv', github: "capistrano/rbenv"
gem 'capistrano-rvm', github: "capistrano/rvm"
Capfile
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rvm'
set :rvm_type, :user
set :rvm_ruby_version, '2.0.0-p451'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
config/deploy.rb
lock '3.4.1'
set :application, 'my_app'
set :repo_url, 'https://github.com/my_acct/my_app.git'
set :deploy_to, '/home/deploy/#{my_app}'
namespace :deploy do
after :restart, :clear_cache do
on roles(:web), in: :groups, limit: 3, wait: 10 do
end
end
end
config/deploy/production.rb
set :stage, :production
server '168.257.12.345', user: 'deploy', roles: %w{web app}
版本
ruby 2.3.1 (local and remote)
rbenv version 2.1.5
rvm 1.27.0
【问题讨论】:
标签: ruby-on-rails rvm web-deployment rbenv capistrano3