如何让Capistrano 3使用RVM ruby?
的Gemfile:
gem 'capistrano', '~> 3.0.0' gem 'capistrano-rails' gem 'capistrano-bundler' gem 'capistrano-rvm' gem 'capistrano3-puma'
Deploy.rb:
set :rvm_type, :user set :rvm_ruby_version, '2.1.1' set :default_env, { rvm_bin_path: '~/.rvm/bin' }
Production.rb
namespace :rails do desc "Open the rails console on primary app server" task :console do on roles(:app), primary: true do execute_interactively "#{current_path}/script/rails console RAILS_ENV=production" end end def execute_interactively(command) cmd = "ssh -l deploy 255.255.255.255 -p 21 -t 'cd #{deploy_to}/current && #{command}'" info "Connecting to 255.255.255.255" exec cmd end end
Capfile:
require 'capistrano/setup' require 'capistrano/deploy' require 'capistrano/rvm' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano/puma' require 'whenever/capistrano' Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
当我运行cap production rvm:check
输出是:
rvm 1.25.19 (master) by Wayne E. Seguin , Michal Papis [https://rvm.io/] system ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]
它是否应该使用user
而不是system
因为我已经指定了rvm_type
?
当我运行cap production rails:console
然后我得到:
INFO Connecting to 255.255.255.255 /usr/bin/env: ruby: No such file or directory Connection to 255.255.255.255 closed.
我不认为您了解capistrano-rvm的工作原理。
这是相关的代码
capistrano-rvm的工作原理是找出RVM安装的位置,然后使用相关的映射命令为 capistrano命令添加前缀。 命令映射是SSHKit的一部分。
Capistrano-rvm默认将gem rake ruby bundle映射到rvm-prefixed版本。 这意味着每当capistrano遇到命令时,例如以execute :bundle
的forms,它将替换它,例如~/.rvm/bin/rvm 2.1.1 do bundle
你已经完全execute_interactively
于你设计的execute_interactively
命令中的整个机制,它指定了内联命令。 事实上,通过建立自己的SSH会话,你已经完全支持了整个capistrano的美丽!
整个set :default_env, { rvm_bin_path: '~/.rvm/bin' }
根本不需要,这就是你使用capistrano-rvm gem的原因。
至于为什么cap production rvm:check
是显示system
是因为在这种情况下术语system
过载。 您认为在此上下文中意味着“这是什么样的rvm设置方案, /usr/local/rvm
安装或~/.rvm
安装”
它实际意味着来自这个代码 ,即它将RVM中列出的ruby版本检查为当前ruby ,服务器上ruby的默认安装称为系统ruby
- capistrano错误消息:请安装pg适配器:`gem install activerecord-pg-adapter`(无法加载此类文件 –
- capistrano错误:… / current:没有这样的文件或目录
- 使用nginx,passenger和capistrano部署Rails应用程序
- Capistrano错误:无法连接到ssh-agent
- Capistrano,防火墙和隧道
- 使用批处理脚本在Windows上启动瘦服务器的多个实例
- Unicorn无法写pid文件
- Capistrano和GitHub Private Repo – 许可被拒绝(公钥)
- Rails,Slicehost,Capistrano – 部署端口问题