重定向Capistrano的输出

时间:2010-04-09 23:38:38

标签: ruby capistrano

我有一个相当大的Capistrano部署文件(Capfile),它包含一些名称空间,并且通常包含很多信息。我的最终目标是,使用Tinder gem将整个部署的输出粘贴到Campfire中。我已经正确安装了Tinder。

我研究了使用Capistrano捕获方法,但这只适用于第一台主机。此外,还需要做很多工作,并添加以下内容:

output << capture 'foocommand'

具体来说,我希望将该文件中任何部署的输出捕获到一个变量中(除了将它放到STDOUT以便我可以看到它),然后将变量中的输出传递给一个名为{{1的函数}}。由于notify_campfire函数在任务结束时被调用(每个任务都与命名空间无关),因此它应该具有可用的任务名称和输出(存储在该输出变量中)。任何关于如何实现这一点的想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是解决问题的一种黑客手段,但您可以尝试在Rake任务中运行部署任务并使用%x捕获输出。

# ...in your Rakefile...
task :deploy_and_notify do
  output = %x[ cap deploy ]  # Run your deploy task here.
  notify_campfire(output)
  puts output                # Echo the output.
end

答案 1 :(得分:1)

我建议不要弄乱Capistrano记录器,而是使用unix提供给你的东西并使用管道:

cap deploy | my_logger.rb

记录器读取STDIN和STDOUT以及两个记录的位置,并将其传回适当的流。

另一方面,Engineyard cap recipies have a logger - 如果您确实需要编辑代码,这可能是一个有用的参考,但我建议您不要这样做。