如何在本地执行Capistrano任务?

时间:2012-01-01 10:17:29

标签: git capistrano

我定义了一个自定义的Capistrano任务,该任务应该在本地运行(在我的开发机器上):

desc "Push code to Dreamhost"
task :push do
  run "git push dreamhost"
end

然而,当我尝试运行cap push时,它会在远程计算机上执行它,即

* executing `push'
* executing "git push dreamhost"
  servers: ["ec2-999-99-999-999.compute-1.amazonaws.com"]

如何让它在本地执行呢?

4 个答案:

答案 0 :(得分:88)

或者使用run_locally与Capistrano本地运行,并且仍然可以获得正确的日志记录和所有好东西

答案 1 :(得分:17)

我建议使用:

system("git push dreamhost")

output = %x[git push dreamhost]

那只是简单的Ruby!

答案 2 :(得分:2)

对于提到的run_locally没有显示输出的评论者,您必须将输出转储到变量然后打印才能看到它。像这样:

task :testing_run_locally do
    output = run_locally "hostname"
    puts "OUTPUT: " + output
end

缺点是在命令完成之前你不会看到任何输出。对于运行时间不长的命令来说没什么大不了的,但运行几分钟的命令会导致部署显示为挂起直到完成。 Capistrano有一个开放式拉取请求,可以向run_locally添加实时命令输出:https://github.com/capistrano/capistrano/pull/285

答案 3 :(得分:1)

您也可以使用:

require 'rake'     # Access to sh command
[...]
desc "Push code to Dreamhost"
task :push do
   sh "git push dreamhost"
end