【问题标题】:How do I execute a Capistrano task locally?如何在本地执行 Capistrano 任务?
【发布时间】:2012-01-01 10:17:29
【问题描述】:

我已经定义了一个自定义 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"]

如何让它在本地执行?

【问题讨论】:

  • 为什么你希望它是一个 capistrano 任务而不是一个常规的 rake 任务?
  • 我实际上想在before :deploy 中执行此操作,这会产生同样的问题(尝试在远程服务器上执行)。

标签: git capistrano


【解决方案1】:

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

【讨论】:

  • 你能详细说明如何使用这个吗?
【解决方案2】:

我建议使用:

system("git push dreamhost")

output = %x[git push dreamhost]

这只是普通的 Ruby!

【讨论】:

  • 我发现 run_locally 没有显示输出但系统显示了
  • 请注意,system 如果失败,不会中止您当前的任务。所以你可能想使用run_locally 而不是@patcon 建议的那样。
【解决方案3】:

对于提到 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

【讨论】:

  • 或更简单:puts run_locally "hostname"
【解决方案4】:

你也可以使用:

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

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2016-02-03
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多