This should have been fixed in this commit:
http://github.com/thoughtbot/hoptoad_notifier/commit/da5bc5a09f0d887e114e2d3aa86268330e05e513
Thanks,
Dan
On Mon, Apr 13, 2009 at 3:47 AM, Ryan Tomayko r...@heroku.com wrote:
On Sun, Apr 12, 2009 at 8:44 PM, shenry stuarthe...@gmail.com wrote:
I have this same problem, Hoptoad will correctly send a message after
heroku rake hoptoad:test but if I create an exception manually I get
nothing
Hoptoad Success: Net::HTTPOK
Rendering /disk1/home/slugs/2185_8e050c1_3bb1/mnt/public/500.html (500
Internal Server Error)
Any ideas?
There's an open bug in the hoptoad plugin. Full detail below but the
quick workaround is to add async. to the environment_filters in
config/initializers/hoptoad.rb as follows:
HoptoadNotifier.configure do |config|
config.api_key = 'YOUR KEY'
config.environment_filters 'async.'
end
This causes the notifier to remove any matching keys before building
the YAML payload to send to hoptoad.
Here's my original write up on the issue. I'm under the impression
that the thoughtbot folks are aware of this. Maybe someone on the list
can bring it to the right person's attention:
This issue occurs when there are complex objects in the request
environment. The hoptoad plugin builds a POST body to send to the
hoptoad server by converting the session, environment, request,
backtrace, and error_message into YAML. Heroku loads a special version
of Thin that places two special variables in the environment:
async.callback and async.close. These are both Proc/Method objects
but could theoretically be any object not directly serializeable to
YAML. When these objects are converted to YAML, they look like this:
async.callback: !ruby/object:Method {}
I assume some kind of deserialization exception is occurring on the
hoptoad server when an attempt is made to parse the YAML. The right
fix is probably to adjust the following code in the hoptoad plugin:
def clean_non_serializable_data(notice) #:nodoc:
notice.select{|k,v| serializable?(v) }.inject({}) do |h, pair|
h[pair.first] = pair.last.is_a?(Hash) ?
clean_non_serializable_data(pair.last) : pair.last
h
end
end
def serializable?(value) #:nodoc:
!(value.is_a?(Module) || value.kind_of?(IO))
end
The serializable? check should probably be a whitelist of allowed
value types instead of a blacklist of disallowed value types. Adding
Method/Proc to the current list of disallowed types would also solve
this issue but it will happen again with some other object. It's
becoming a very common pattern in Rack to add various types of objects
to the environment.
Thanks,
Ryan
--
Dan Croak
http://thoughtbot.com
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
Heroku group.
To post to this group, send email to heroku@googlegroups.com
To unsubscribe from this group, send email to
heroku+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/heroku?hl=en
-~--~~~~--~~--~--~---