如何在使用capistrano部署Node.js项目时成功通知Airbrake的部署?

问题描述:

这是一个古怪的问题。如何在使用capistrano部署Node.js项目时成功通知Airbrake的部署?

Capistrano的2.14.2

我使用Capistrano的部署夫妇Node.js的项目,并能正常工作(从同一RVM内和宝石Ruby安装)。但是,我希望Airbrake得到这些部署的通知。

使用“减速板”的Node.js模块,并呼吁

airbrake.trackDeployment({repo: '...'}); 

的作品,但不知道如何可靠地在部署时只用一次这个功能。如果我在服务器内调用它,那么每次启动服务器时,Airbrake都会收到“部署”通知,这显然不正确。

添加

require 'airbrake/capistrano' 

以绝对deploy.rb不起作用。

如何他人成功使用

airbrake.trackDeployment 

在此基础上的解决方案http://dwradcliffe.com/2011/09/26/using-airbrake-with-node.html,我想出了以下内容,这完全取决于使用Javascript:

在我的Node.js的根目录下,创建一个deploy.js文件,如下所示:

var airbrake = require('airbrake').createClient("AIRBRAKE_API_KEY"); 

var deployment = {rev: process.argv[2], 
        repo: process.argv[3], 
        env: process.argv[4], 
        user: process.argv[5]}; 

airbrake.trackDeployment(deployment, function(err, params) { 
    if (err) {throw err} 
    console.log('Tracked deployment of %s to %s', params.rev, params.env); 
}) 

在配置/ deploy.rb,加

require 'airbrake/capistrano' 

namespace :airbrake do 
    desc "Notify Airbrake of a new deploy." 
    task :deploy do 
    system "node deploy.js #{current_revision} #{repository} #{stage} #{user}" 
    end 
end 

您可以创建一个简单的js文件,您可以在本地运行(例如在您的机器上),以通知airbrake作为最后的部署任务。例如,你可以使用反引号操作符运行任务:

deploy.task :notify_airbrake do 
    `node notify_airbrake.js` 
end 

如果你没有节点本地安装,你也可以挑选一台服务器通过ssh来运行脚本通知:

deploy.task :notify_airbrake do 
    `ssh youserver "node notify_airbrake.js"` 
end 
(这显然是嵌入在Rails应用程序)
+0

是啊,这就是我想我需要做的。如果我在本地完成,我必须将正确的部署目标环境传递给.js程序。如果我使用SSH命令,那么我应该能够依赖于Node环境。谢谢!这很简单。享受我的赏金:)。 – 2013-05-15 23:04:49