Capistrano 3拉命令行参数

时间:2014-01-09 17:46:41

标签: ruby-on-rails git rake capistrano

我正在从Capistrano 2升级到Capistrano 3.在第2章中,我使用以下命令行参数作为分支名称(否则默认为master

set :branch, fetch(:branch, "master")

如果我调用cap deploy,它将部署主分支。但它也让我这样做:

cap deploy -S branch=foo

哪个部署foo分支。

现在,在Capistrano 3中,如果我尝试运行上述内容,我会收到错误:invalid option: -S

现在通过命令行传递参数的正确方法是什么?

3 个答案:

答案 0 :(得分:38)

我最终做的是设置ENV变量。

所以现在我可以打电话了

cap production deploy branch=mybranch

它将部署mybranch。如果我运行一个简单的cap production deploy,它将部署默认分支(master如果你没有设置一个,但我已将我的下面更改为default来演示)

这是我在deploy.rb文件中输入的代码:

set :branch, "default"
if ENV['branch']
        set :branch, ENV['branch']
end

答案 1 :(得分:10)

Rake任务(上限正在使用)是支持参数。

namespace :test do
  desc "Test task"
  task :test, :arg1 do |t, args|
    arg1 = args[:arg1]
    puts arg1
  end
end

上限-T输出:

  

cap yiic:test [arg1] #Test task

调用示例:

  

限制生产yiic:测试[test1]

此外,这是一个有用的post

P.S。:你应该使用env vars进行“全局”设置。就像多个任务的常见值一样。

答案 2 :(得分:1)

为Capistrano 3提供更新且有效的解决方案(因为我花了一段时间才找到它并且有太多的测试让它工作)。

我的文件就像:

config/
    deploy/
        staging.rb
        production.rb
    deploy.rb
...
Capfile

staging.rb我有:

server 'staging', roles: %w(db)

set :branch,    ENV.fetch('REVISION', 'master')
set :use_sudo,  false
set :user,      'toto'
set :deploy_to, '/var/www'

(在server 'staging'中,staging是SSH连接,在我的.ssh/config中定义

然后,要部署特定版本,我只需要调用:

cap staging deploy REVISION=3b2d9ab

其中3b2d9ab是Git提交哈希(短版或长版)。