This client library reports exceptions to Squash, the Squarish exception reporting and management system. It's compatible with both pure-Ruby and Ruby on Rails projects.
Comprehensive documentation is written in YARD- and Markdown-formatted comments
throughout the source. To view this documentation as an HTML site, run
rake doc
.
For an overview of the various components of Squash, see the website documentation at https://github.com/SquareSquash/web.
This library is compatible with Ruby 1.8.6 and later, including Ruby Enterprise Edition, and with Rails 2.0 and later.
The only dependency is the squash_ruby
gem and its dependencies. For more
information, consult the squash_ruby
gem documentation:
https://github.com/SquareSquash/ruby
Add this gem and the Squash Ruby gem to your Gemfile:
gem 'squash_ruby', :require => 'squash/ruby'
gem 'squash_rails', :require => 'squash/rails'
See the squash_ruby
gem for configuration instructions. Note that it is no
longer necessary to set the :environment
configuration option; the Rails
client library automatically sets that to the Rails environment.
You can use the usual Squash::Ruby.notify
method in your Rails projects, but
you will miss out on some Rails-specific information in your exception logs. You
can automatically have the Squash client send along request and Rails
information by using the client's around_filter
:
class ApplicationController < ActionController::Base
include Squash::Ruby::ControllerMethods
enable_squash_client
end
Now any exception raised in the course of processing a request will be annotated with Rails specific information. The exception is then re-raised for normal Rails exception handling.
There may be situations where other parts of the code "eat up" an exception
before it reaches this filter; the most common example would be exceptions that
are handled by a rescue_from
statement elsewhere in your controller. You can
use the {Squash::Ruby::ControllerMethods#notify_squash} method to still send
these exceptions to Squash:
class ApplicationController < ActionController::Base
include Squash::Ruby::ControllerMethods
rescue_from(ActiveRecord::RecordInvalid) do |error|
notify_squash error
render :file => "public/422.html", :status => :unprocessable_entity
end
end
Important note: Some versions of Rails (below 3.0) do not automatically run
the rails/init.rb
within the gem. You will need to call
require 'squash/rails/configure'
in a config/initializers
file in order to
apply the Rails configuration defaults. You'll also need to add
load 'squash/rails/tasks.rake'
to your Rakefile.
There are many additional features you can take advantage of; see Additional
Features in the squash_ruby
documentation.
By default, notify_squash
uses the filtered parameter list generated according
to your config.filter_parameters
setting. If you need to further filter your
request parameters, or if you are storing sensitive information in your session,
headers, or other fields transmitted to Squash, override the
{Squash::Ruby::ControllerMethods#filter_for_squash} method in your controller.
Squash works best when you notify it if your web app's deploys. If you're using
Capistrano, this is easy. For Capistrano 2, just add
require 'squash/rails/capistrano2'
to your config/deploy.rb
file. Everything
else should be taken care of. For Capistrano 3, just add
require 'squash/rails/capistrano3'
to your Capfile
.
If you do not deploy to a live Git directory, you will need to write a
REVISION
file to your app root. To do this, include the following in your
config/deploy.rb
file in Capistrano 2 or 3:
before 'deploy:compile_assets', 'squash:write_revision'
or in Capistrano 2:
before 'deploy:assets:precompile', 'squash:write_revision'
If you're not using Capistrano, you will need to configure your deploy script
so that it runs the squash:notify
Rake task on every deploy target. This Rake
task requires two environment variables to be set: REVISION
(the current
revision of the source code) and DEPLOY_ENV
(the environment this server is
hosting).
The Squash Rails gem adds the following configuration options:
deploy_path
: The path to post new deploys to. By default it's set to/api/1.0/deploy
.