繁体   English   中英

如何让Capistrano 3使用RVM ruby​​?

[英]How to get Capistrano 3 to use 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 <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [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的形式,它将替换它,例如~/.rvm/bin/rvm 2.1.1 do bundle

你已经在你设计的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM