How do I execute a Capistrano task locally?

2019-06-15 00:35发布

I have defined a custom Capistrano task that's supposed to run locally (on my development machine):

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

however when I try to run cap push it executes it on the remote machine, ie.

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

how do I get it to execute locally instead?

4条回答
我欲成王,谁敢阻挡
2楼-- · 2019-06-15 01:04

You can also use:

require 'rake'     # Access to sh command
[...]
desc "Push code to Dreamhost"
task :push do
   sh "git push dreamhost"
end
查看更多
smile是对你的礼貌
3楼-- · 2019-06-15 01:07

Or use run_locally to run natively with Capistrano, and still get proper logging and all that good stuff

查看更多
家丑人穷心不美
4楼-- · 2019-06-15 01:10

I suggest using :

system("git push dreamhost")

or

output = %x[git push dreamhost]

That's just plain Ruby !

查看更多
Melony?
5楼-- · 2019-06-15 01:20

For the commenter that mentioned run_locally doesn't show output, you have to dump the output to a variable and then print it to see it. Like this:

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

The downside is you won't see any output until the command has finished. Not a big deal for commands that don't run long but something that runs for several minutes will cause the deploy to appear like it is hung until it finishes. There is an open pull request for Capistrano that adds real time command output to run_locally: https://github.com/capistrano/capistrano/pull/285

查看更多
登录 后发表回答