我定义了一个自定义的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"]
如何让它在本地执行呢?
答案 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