MouseHole Dead?
Robert C Corsaro
rcorsaro at optaros.com
Fri Dec 21 11:04:59 EST 2007
Hi,
Trying to get trunk working. Seems a little broken. Can I assume it
worked at some point? I'm using mongrel 1.1.2 and most of the problems
seem to be because of mongrel. It has probably changed some in the past
8 months. The first problem is lib/mouseHole/app.rb(line 33) :
def initialize server, klass_name = nil, model = nil, rb = nil
klass_name ||= self.class.name
self.model = model
self.title = klass_name
METADATA.each do |f|
self.send("#{f}=", self.class.send("default_#{f}"))
end
self.klass = klass_name
self.path = rb
if self.handlers
self.handlers.each do |h_is, h_name, h_blk|
next unless h_is == :mount
server.unregister "/#{h_name}"
server.register "/#{h_name}", h_blk
end
end
basic_setup
end
The unregister method throws an exception if the h_name isn't
registered. This is probably just there for safety and mongrel probably
didn't throw an exception when it was written. Here is an ugly patch,
feel free to make a better one:
Index: lib/mouseHole/app.rb
===================================================================
--- lib/mouseHole/app.rb (revision 124)
+++ lib/mouseHole/app.rb (working copy)
@@ -30,7 +30,14 @@
if self.handlers
self.handlers.each do |h_is, h_name, h_blk|
next unless h_is == :mount
- server.unregister "/#{h_name}"
+ # BOB_HACK: unregister throws an exception if the h_name isn't
+ # registered, so I catch it
+ begin
+ server.unregister "/#{h_name}"
+ rescue
+ print "no problem"
+ end
+ # END BOB_HACK
server.register "/#{h_name}", h_blk
end
end
I've also attached it in case my email is ugly.
The second problem is in bin/mouseHole. We are trying to register the
uri "http:", but mongrel only allows uris that start with "/". This
throws a really ugly nil exception because mongrel is doing some funky
stuff. Fist I added this to mogrel-1.1.2/lib/mongrel.rb to figure out
what the problem was:
rescue URIClassifier::RegistrationError
handlers = @classifier.resolve(uri)[2]
method_name = in_front ? 'unshift' : 'push'
# BOB_HACK: Method assumes exception means something about
# handlers already existing and tries to push this one, but it
# could be something else this isn't a good solution but it
# works for me.
if handlers.respond_to?method_name
handlers.send(method_name, handler)
else
raise $!
end
# END BOB_HACK
end
I have worked around this by commenting out the check for '/' at the
start of the uri(probably a really bad idea) in
mongrel-1.1.2/lib/uri_classifier.rb (line 31) :
# Register a handler object at a particular URI. The handler can be
whatever
# you want, including an array. It's up to you what to do with it.
#
# Registering a handler is not necessarily threadsafe, so be
careful if you go
# mucking around once the server is running.
def register(uri, handler)
raise RegistrationError, "#{uri.inspect} is already registered"
if @handler_map[uri]
raise RegistrationError, "URI is empty" if !uri or uri.empty?
# here is my change:
#raise RegistrationError, "URI must begin with a
\"#{Const::SLASH}\"" unless uri[0..0] == Const::SLASH
@handler_map[uri.dup] = handler
rebuild
end
Ok. So now mouseHole starts up. Yippy! My next problem is this: On
the app page, there is an enable checkbox, but no submit button. Are
all apps automatically enabled? What's up with that? The checkbox does
diddly squat. Here is my dump of the mousehole_apps table:
BEGIN TRANSACTION;
CREATE TABLE mousehole_apps ("id" INTEGER PRIMARY KEY NOT NULL, "script"
varchar(255) DEFAULT NULL, "uri" varchar(255) DEFAULT NULL, "active"
integer DEFAULT 1 NOT NULL, "matches" text DEFAULT NULL, "created_at"
datetime DEFAULT NULL);
INSERT INTO "mousehole_apps"
VALUES(2,'hoodwinkd.rb','NULL',1,NULL,'2007-12-21 09:48:02');
INSERT INTO "mousehole_apps"
VALUES(3,'rcorsaro.rb','NULL',1,NULL,'2007-12-21 09:48:02');
COMMIT;
rcorsaro.rb is my test script. It's located in ~/.mouseHole/. Here it is:
# Blah Blah mousehole
# by Robert Corsaro
# <http://localhost/my.user.rb
class RCorsaro < MouseHole::App
title "RCorsaro"
namespace "http://what.dyndns.org/"
description "add an h1 to a page"
version 1.0
+ url("http://localhost/*")
def rewrite(page)
puts 'hello'
(page/'body').append("<h1>Hi There!</h1>")
end
end
See anything wrong?
I have next week off, so I can work on mouseHole if it needs working on.
Does anyone give a shit?
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: unregister.patch
Url: http://rubyforge.org/pipermail/mousehole-scripters/attachments/20071221/31659942/attachment.pl
More information about the Mousehole-scripters
mailing list