From e46cac14ba80c74e57a124f9026bd7fe28ba153a Mon Sep 17 00:00:00 2001 From: Dimko Date: Fri, 8 Mar 2013 05:12:01 +0400 Subject: [PATCH] Added capistrano integration --- lib/rollbar/capistrano.rb | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 lib/rollbar/capistrano.rb diff --git a/lib/rollbar/capistrano.rb b/lib/rollbar/capistrano.rb new file mode 100644 index 00000000..01d1792c --- /dev/null +++ b/lib/rollbar/capistrano.rb @@ -0,0 +1,50 @@ +require 'capistrano' + +module Rollbar + module Capistrano + def self.load_into(configuration) + configuration.load do + after 'deploy', 'rollbar:deploy' + after 'deploy:migrations', 'rollbar:deploy' + after 'deploy:cold', 'rollbar:deploy' + + namespace :rollbar do + desc 'Send the deployment notification to Rollbar.' + task :deploy, :except => { :no_release => true } do + require 'net/http' + require 'rubygems' + require 'json' + + _cset(:rollbar_user) { ENV['USER'] || ENV['USERNAME'] } + _cset(:rollbar_env) { fetch(:rails_env, 'production') } + _cset(:rollbar_token) { abort("Please specify the Rollbar access token, set :rollbar_token, 'your token'") } + + unless configuration.dry_run + uri = URI.parse('https://api.rollbar.com/api/1/deploy/') + + params = { + :local_username => rollbar_user, + :access_token => rollbar_token, + :environment => rollbar_env, + :revision => current_revision + } + + request = Net::HTTP::Post.new(uri.request_uri) + request.body = JSON.dump(params) + + Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http| + http.request(request) + end + end + + logger.info('Rollbar notification complete') + end + end + end + end + end +end + +if Capistrano::Configuration.instance + Rollbar::Capistrano.load_into(Capistrano::Configuration.instance) +end