From martindemello at gmail.com Wed Aug 1 09:56:08 2007 From: martindemello at gmail.com (Martin DeMello) Date: Wed, 1 Aug 2007 19:26:08 +0530 Subject: merb speed In-Reply-To: <46AF2D26.2030501@anl.gov> References: <46AF2D26.2030501@anl.gov> Message-ID: Thamks, grabbed a copy :) martin On 7/31/07, Randall Potter wrote: > Watch this: http://peepcode.com/products/benchmarking-with-httperf and > you will no longer be an idiot about benchmarking. :) > > --R > > Martin DeMello wrote: > > Hi, > > > > We have a rails app which is essentially a web UI to a unix > > filesystem, and which has been performing rather slowly. I've been > > looking at rewriting it in merb, so I did a quick spike where I ported > > over all the rails code necessary to log in as a user, and generate > > the same file list page that rails was serving up. However, the > > numbers appear quite bad (twice as slow as rails, for a naive > > benchmark), leading me to believe that I'm doing something wrong. I'll > > try to get permission to post some code, but on general principles are > > there any pitfalls to look for when converting rails code to merb? > > > > Also, I'm trying to do some sort of rough client-side benchmarking > > using the following code - is there anything obviously wrong with it? > > I'm getting numbers of over 10 seconds per page load when I have 50 > > users repeatedly requesting a dynamic page in a loop: > > > > client = HTTPAccess2::Client.new > > client.set_cookie_store("cookie.dat") > > client.post(url, {:user_login => login, :user_password => pwd}) > > client_time = [] > > all_client_avg = [] > > all_server_avg = [] > > $total_client_avg = [] > > $total_server_avg = [] > > num_iterations.times do |i| > > folders = YAML.load(client.get_content("#{url}/folder/all_user_folders")) > > folders.each do |folder| > > client_time << Benchmark.realtime do > > response_size = client.post("#{url}/resources/set_current_folder", > > {:folder => $folder}).content.length > > end > > end > > > > client_avg = (client_time.inject(0) {|sum, element| sum + element}) / > > client_time.length > > end > > > > I'm rather new to both web development and benchmarking, so please > > feel free to talk to me as if I were an idiot :) > > > > martin > > _______________________________________________ > > Merb-devel mailing list > > Merb-devel at rubyforge.org > > http://rubyforge.org/mailman/listinfo/merb-devel > > > > -- > "When something is too hard it means that you're not cheating enough." --DHH > > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel > From cocoa.guy at gmail.com Wed Aug 1 17:52:41 2007 From: cocoa.guy at gmail.com (Cocoa Guy) Date: Wed, 1 Aug 2007 14:52:41 -0700 Subject: Deploying with Merb In-Reply-To: References: Message-ID: I ended up using an apache rewrite rule to redirect file uploads to merb. It took me enough time to get this working, that I'm sharing it in case others find it useful: RewriteEngine On RewriteCond %{HTTP:Content-Type} multipart/form-data #RewriteCond %{REQUEST_URI} your-regex RewriteCond %{REQUEST_METHOD} POST RewriteRule ^/(.*) http://127.0.0.1:4000/$1 [P] With the commented out line, this will let merb handle all multipart post requests. You can un-comment the 3rd line and add your own expression to further limit what is handed to Merb. Cheers, -pete From mattaimonetti at gmail.com Thu Aug 2 03:38:09 2007 From: mattaimonetti at gmail.com (Matt Aimonetti) Date: Thu, 2 Aug 2007 00:38:09 -0700 Subject: Deploying with Merb In-Reply-To: References: Message-ID: Thanks, Did anyone tried to do something like that with nginx ? -Matt On 8/1/07, Cocoa Guy wrote: > > I ended up using an apache rewrite rule to redirect file uploads to > merb. It took me enough time to get this working, that I'm sharing it > in case others find it useful: > > RewriteEngine On > RewriteCond %{HTTP:Content-Type} multipart/form-data > #RewriteCond %{REQUEST_URI} your-regex > RewriteCond %{REQUEST_METHOD} POST > RewriteRule ^/(.*) http://127.0.0.1:4000/$1 [P] > > With the commented out line, this will let merb handle all multipart > post requests. You can un-comment the 3rd line and add your own > expression to further limit what is handed to Merb. > > Cheers, > -pete > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070802/4b1f6cd0/attachment.html From ry at tinyclouds.org Thu Aug 2 16:34:37 2007 From: ry at tinyclouds.org (ry dahl) Date: Thu, 2 Aug 2007 22:34:37 +0200 Subject: controller exceptions In-Reply-To: References: <21ee31950707311057o173344d7v72506524087067f1@mail.gmail.com> Message-ID: <21ee31950708021334g57b60a29lffd18916c40885e1@mail.gmail.com> > Can you make a small proof of concept patch that we can benchmark a > bit and then decide? Attached is a patch which implements the controller exception api. It's hacky and not meant for production. In merb_exceptions.rb is the definition of Merb::ControllerExceptions::Base. That is an abstract base class. Derived from Base are a bunch of other classes: class NoContent < Base; STATUS = 204; end class ResetContent < Base; STATUS = 205; end class PartialContent < Base; STATUS = 206; end class MultipleChoices < Base; STATUS = 300; end To use this, one would derive a class from one of these and write a method :merb_action (i didn't use :action because of name conflicts) which should work more or less like a typical controller action. The patch contains specs showing it in action with render :layout This should be enough to benchmark? The erb file for MyException#merb_action is looked for at app/views/exceptions/my_exception.erb ry -------------- next part -------------- A non-text attachment was scrubbed... Name: controller_exceptions.diff Type: application/octet-stream Size: 9315 bytes Desc: not available Url : http://rubyforge.org/pipermail/merb-devel/attachments/20070802/e035470e/attachment.obj From ry at tinyclouds.org Thu Aug 2 17:53:56 2007 From: ry at tinyclouds.org (ry dahl) Date: Thu, 2 Aug 2007 23:53:56 +0200 Subject: random code questions Message-ID: <21ee31950708021453x88e1467rbdb57279595f4cee@mail.gmail.com> merb_dispatcher.rb:28 controller = klass.build(request.body, request.params, route, response) Why not just use a typical constructor? merb_dispatcher.rb:35 raise Merb::HTTPMethodNotAllowed.new(method, allowed) Why not check for this after the action has been dispatched to the controller? controller_mixin.rb:149 def query_parse(qs, d = '&;') Why not offload query parsing onto Mongrel as much as possible? From ez at engineyard.com Thu Aug 2 18:08:04 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Thu, 2 Aug 2007 15:08:04 -0700 Subject: random code questions In-Reply-To: <21ee31950708021453x88e1467rbdb57279595f4cee@mail.gmail.com> References: <21ee31950708021453x88e1467rbdb57279595f4cee@mail.gmail.com> Message-ID: On Aug 2, 2007, at 2:53 PM, ry dahl wrote: > merb_dispatcher.rb:28 > controller = klass.build(request.body, request.params, route, > response) > Why not just use a typical constructor? For testability. I just recently separated this out. We need to be able to initialize and get a controller instance before we call parse_request to parse the request. This is so you can get an instance of your controller in your specs and setup mocks and whatnot before you call parse_request. build just wraps up the same functionality into one method so it works exactly the same in Dispacther.handle. This is just to increase testability. > > merb_dispatcher.rb:35 > raise Merb::HTTPMethodNotAllowed.new(method, allowed) > Why not check for this after the action has been dispatched to the > controller? Because there is no valid controller/action to call if this gets raised. It's enforcing the rules of routing which happens before dispatching to the controller. I'm not opposed to changing the exception raised but this check does belong where it is IMHO. > > controller_mixin.rb:149 > def query_parse(qs, d = '&;') > Why not offload query parsing onto Mongrel as much as possible? Because mongrel does not have a method that parses nested parameters. so mongrel's query_parse will fail to parse ?foo[bar][baz]=nik but merb's query_parse will correctly handle it. I agree it's a bit obsfuscated though ;) Could possible be merged and refactored with normailize_params. I'll put it on the todo list. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From canadaduane at gmail.com Sat Aug 4 15:36:00 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Sat, 4 Aug 2007 13:36:00 -0600 Subject: How do you run an app on "edge merb"? Message-ID: <96C54309-DB41-43C7-A365-EE78F5E8B666@gmail.com> I didn't quite see a direct answer to Matt's question regarding running merb from SVN: http://rubyforge.org/pipermail/merb-devel/2007-July/000132.html In a merb application, is there something comparable to having rails in the vendor/ folder of a rails app? Thanks, Duane Johnson (canadaduane) From merb at dusty.name Sat Aug 4 15:43:35 2007 From: merb at dusty.name (Dusty Doris) Date: Sat, 4 Aug 2007 15:43:35 -0400 Subject: observers Message-ID: Just discovered something, thought I'd share in case anyone else was trying to use active record observers. In rails you define your observers in the environment.rb and it instantiates them somewhere during startup. To use that in merb you have to define the observers and then also instantiate them. Add something like this to the end of the merb_init.rb file. ActiveRecord::Base.observers << :attachment_observer ActiveRecord::Base.instantiate_observers At least its working for me from merb -i right now. From merb at dusty.name Sat Aug 4 15:46:16 2007 From: merb at dusty.name (Dusty Doris) Date: Sat, 4 Aug 2007 15:46:16 -0400 Subject: Fwd: How do you run an app on "edge merb"? In-Reply-To: References: <96C54309-DB41-43C7-A365-EE78F5E8B666@gmail.com> Message-ID: forgot to cc the list On 8/4/07, Duane Johnson wrote: > I didn't quite see a direct answer to Matt's question regarding > running merb from SVN: > http://rubyforge.org/pipermail/merb-devel/2007-July/000132.html > > In a merb application, is there something comparable to having rails > in the vendor/ folder of a rails app? > > Thanks, > I don't know if there is something like that, but you can just install edge. $ svn co http://svn.devjavu.com/merb/trunk merb $ cd merb $ rake install That will install trunk as a gem on your system. From ez at engineyard.com Sat Aug 4 15:51:47 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Sat, 4 Aug 2007 12:51:47 -0700 Subject: How do you run an app on "edge merb"? In-Reply-To: References: <96C54309-DB41-43C7-A365-EE78F5E8B666@gmail.com> Message-ID: On Aug 4, 2007, at 12:46 PM, Dusty Doris wrote: > forgot to cc the list > > > On 8/4/07, Duane Johnson wrote: >> I didn't quite see a direct answer to Matt's question regarding >> running merb from SVN: >> http://rubyforge.org/pipermail/merb-devel/2007-July/ >> 000132.html >> >> In a merb application, is there something comparable to having rails >> in the vendor/ folder of a rails app? >> >> Thanks, >> > > I don't know if there is something like that, but you can just > install edge. > > $ svn co http://svn.devjavu.com/merb/trunk merb > $ cd merb > $ rake install > > That will install trunk as a gem on your system. Yes there are some built in rake tasks for freezing the framework: rake merb:freeze # freeze the merb framework from installed gem into dist/framework for portability rake merb:freeze_from_svn # freeze the merb framework from svn trunk rake merb:unfreeze # unfreeze this app from the framework and use system gem. So merb:freeze_from_svn will freeze the current trunk into your app. When you freeze merb into your app you need to use script/merb instead of plain old merb to start your server. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From mattaimonetti at gmail.com Sun Aug 5 23:19:26 2007 From: mattaimonetti at gmail.com (Matt Aimonetti) Date: Sun, 5 Aug 2007 20:19:26 -0700 Subject: new patch adding control_for :boolean to create a checkbox Message-ID: I'm sorry I didn't have time working on the tests/models generator but here is a tiny patch I wrote to help you creating form check boxes. http://merb.devjavu.com/projects/merb/ticket/114 -Matt -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070805/e42cd930/attachment.html From canadaduane at gmail.com Mon Aug 6 10:39:19 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Mon, 6 Aug 2007 08:39:19 -0600 Subject: Proposal: Pure Regex Router Message-ID: <2895272E-FAE0-4FF9-A561-77569F03075B@gmail.com> So this has been an idea ever since Rails came out. Why not use a pure regular expression router in similar fashion to gsub? I imagine it working something like this: Merb::Router.prepare do |r| r.add %r[^/(.*)/(.*)/(\d+)$], :controller => '\1', :action => '\2', :id => '\3' r.add %r[^/user-(\d+)$], :user_id => '\1', :controller => 'free_area/users', :action => 'index' end The flexibility is endless in this system (far more possibilities than Rails' system) and it lets people immediately grasp routes if then understand regular expressions (which they should, otherwise, this is a good opportunity to learn). In addition, I propose we add more options to the router so that the protocol, port, and domain become available: r.add :path => %r[^/([^\/,?]*)$], :domain => /^(blog|news) \./, :controller => '\1', :action => 'index' Once this is set up, we could potentially add a convenience layer on top so that we get something a little more like our current routes: r.add ":controller/:action" # Detection of a string causes r.add to create a regexp route matching the string, e.g.: # r.add %r[^/([^/,?]+)/([^/,?]+)], :controller => '\1', :action => '\2' Thoughts? Duane Johnson (canadaduane) From marcus.roberts at gmail.com Tue Aug 7 15:07:20 2007 From: marcus.roberts at gmail.com (Marcus Roberts) Date: Tue, 7 Aug 2007 20:07:20 +0100 Subject: Upload progress and drb Message-ID: <4e0e8ed70708071207x192c0ddbw67e9e510e7e8e16@mail.gmail.com> Hi, Sorry if this is a stupid question! I used to have a site running on Merb 0.1.0. When running as a cluster, it would automatically start a drb process to co-ordinate the upload progress monitoring. Since uploading to 0.3.7 (a bit of a jump!), the drb process hasn't started automatically. I seem to start one if I run merb -s 32323 manually, but when I do check on a file upload progress, I just get a nil back. Before digging into the upload side of it, I suspect that the drb not starting automatically might be the deeper cause of the problem. Should drb start automatically? In my merb.yml I have :config: dist/conf/upload.conf :drb_server_port: 32323 and in dist/conf/upload.conf I have :drb: true :path_info: /upload/applet_upload_file :frequency: 3 Thanks for any help/pointers! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070807/9f01368d/attachment.html From scaudill at gmail.com Tue Aug 7 15:43:01 2007 From: scaudill at gmail.com (Stephen Caudill) Date: Tue, 7 Aug 2007 15:43:01 -0400 Subject: Upload progress and drb In-Reply-To: <4e0e8ed70708071207x192c0ddbw67e9e510e7e8e16@mail.gmail.com> References: <4e0e8ed70708071207x192c0ddbw67e9e510e7e8e16@mail.gmail.com> Message-ID: add :start_drb: true to your merb.yml and you should be good to go. - v.dolo On Aug 7, 2007, at 3:07 PM, Marcus Roberts wrote: > Hi, > > > Sorry if this is a stupid question! > > > I used to have a site running on Merb 0.1.0. When running as a > cluster, it would automatically start a drb process to co-ordinate > the upload progress monitoring. > > > Since uploading to 0.3.7 (a bit of a jump!), the drb process hasn't > started automatically. I seem to start one if I run merb -s > 32323 manually, but when I do check on a file upload progress, I > just get a nil back. > > > Before digging into the upload side of it, I suspect that the drb > not starting automatically might be the deeper cause of the > problem. Should drb start automatically? > > > In my merb.yml I have > > > :config: dist/conf/upload.conf > :drb_server_port: 32323 > > and in dist/conf/upload.conf I have > > > :drb: true > :path_info: /upload/applet_upload_file > :frequency: 3 > > > > Thanks for any help/pointers! > > > > > > > > > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel From canadaduane at gmail.com Wed Aug 8 01:10:37 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Tue, 7 Aug 2007 23:10:37 -0600 Subject: Proposal: Pure Regex Router (and router wishlist) In-Reply-To: <3D0820A7-5E51-470F-A33F-D46995BFC802@gmail.com> References: <2895272E-FAE0-4FF9-A561-77569F03075B@gmail.com> <3D0820A7-5E51-470F-A33F-D46995BFC802@gmail.com> Message-ID: <01138350-8B7B-4601-BF52-E6F9AB7B883E@gmail.com> On Aug 7, 2007, at 2:41 AM, Luke Sutton wrote: >> So this has been an idea ever since Rails came out. Why not use a >> pure regular expression router in similar fashion to gsub? I imagine >> it working something like this: >> >> Merb::Router.prepare do |r| >> r.add %r[^/(.*)/(.*)/(\d+)$], :controller => '\1', :action => >> '\2', :id => '\3' >> r.add %r[^/user-(\d+)$], :user_id => '\1', :controller => >> 'free_area/users', :action => 'index' >> end > > Certainly very powerful, but I'm a little bit dubious of it's > usefulness ? is your intent to use regular expressions like this to > reduce redundancy in route declaration? > > In that case I think the routing DSL could be extended to make that > possible. That would be friendlier to noobs like yours truly. > I realize I'm fighting against long-held tradition. Luckily, I'm so much against the current way of things as I am deterred by its inflexibility at times (or at least, the inflexibility of Rails Routes). I feel like we should have a Pure Regex Router as the foundation, and then other router-adding styles built on top of that. Some of the things I've tried to do that I couldn't: - Use symbols other than "/" to denote a partition between segments. For example: /show-user-1 /edit-movie-42 - Use specific characters to reduce the size of URLs, i.e. map url parts to other things. For example, suppose I wanted to map the CRUD + actions like this: i => index n => new c => create r => show e => edit u => update d => delete Such that the following URLs are valid: /users-i (maps to 'users' controller, 'index' action) /movies-u (maps to 'movies' controller, 'update' action) r.add %r[^/([^-]+)-([increud])$], :controller => '\1' do |match| map = {'i' => 'index', 'n' => 'new', 'c' => 'create'} # etc. {:controller => match[1], :action => map[match[2]]} end - Map segments to other segments. For example, suppose you have several controllers within an admin "module", and let's say you decide later that these controllers should be externally accessible from the "superadmin" folder as well. Currently, you would need to create a route for each controller: r.add '/superadmin/users/:action/:id', :controller => 'admin/users' r.add '/superadmin/movies/:action/:id', :controller => 'admin/movies' r.add '/superadmin/categories/:action/:id', :controller => 'admin/ categories' etc. Instead, we should be able to do something like this: r.add '/superadmin/:controller_segment/:action/:id', :controller => 'admin/:controller_segment' - Type-agnostic routing. For example, suppose I have a database of many types of objects that all share a universally unique identifier such as a GUID. By looking at the URL only, I can't tell what the object is--so, first I need to do a database lookup to determine what type of object the referenced thing is and then route it to a controller/action pair. For example: http://localhost:4000/555598 r.add '^/(\d+)$' do |match| if obj = MyObject.find(match[1]) {:controller => obj.controller, :action => 'index'} else false end end In the above example, the router can only determine where to route to after a database lookup. >> In addition, I propose we add more options to the router so that the >> protocol, port, and domain become available: >> >> r.add :path => %r[^/([^\/,?]*)$], :domain => /^(blog|news) >> \./, :controller => '\1', :action => 'index' > > Now this is a top idea! I can imagine many situations where this > would be handy. For example you might wish to route secure > connections differently. > > In addition to protocol, port and domain, it would be very useful > to have access to sub-domains in the route declarations. Yes, it would be good. Once we finish this discussion and everyone is happy with the ideas, I'll see if I can add incorporate them into Merb. Duane From canadaduane at gmail.com Wed Aug 8 17:19:38 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Wed, 8 Aug 2007 15:19:38 -0600 Subject: Fwd: Proposal: Pure Regex Router (and router wishlist) In-Reply-To: References: <2895272E-FAE0-4FF9-A561-77569F03075B@gmail.com> <3D0820A7-5E51-470F-A33F-D46995BFC802@gmail.com> <01138350-8B7B-4601-BF52-E6F9AB7B883E@gmail.com> <2fff50390708072234v3997aca8ocbd7f957beb6a019@mail.gmail.com> Message-ID: Forgot to reply to list. ---------- Forwarded message ---------- From: Duane Johnson Date: Aug 8, 2007 3:17 PM Subject: Re: Proposal: Pure Regex Router (and router wishlist) To: Daniel N I realize I'm fighting against long-held tradition. Luckily, I'm so > much against the current way of things as I am deterred by its > inflexibility at times (or at least, the inflexibility of Rails > Routes). I feel like we should have a Pure Regex Router as the > foundation, and then other router-adding styles built on top of that. > > Correction: The above should read, "I'm *not* so much against the current way of things, as I am deterred by its inflexibility at times." Sorry about the harsh sounding original text. On 8/7/07, Daniel N wrote: > > > > I'm not sure why you would want the above in any routes. Merb supports > restful routes so I don't see why you would want what you suggested there. > > You end up mixing the verb into the noun and get multiple url's for a > resourse just to do crud. That's what restful routes gets us away from. > Personally I like the restful conventions and find that it does nice things > to the way I think of stuff. > Agreed. I see that it was not a very convincing example, but the point was to show how an idea outside the box is currently "impossible" without rewriting the router. My objective is to find a solution with the fewest possible restrictions (a superset) so that the current best-practice ( i.e. restful routes and rails-alike routes) becomes a subset of the solution. The other two examples, map segments to other segments, and type agnostic > routing look interesting to me though. > Just my 0.02 > Thanks for your feedback on these. Duane Johnson (canadaduane) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070808/0fe29115/attachment.html From marcus.roberts at gmail.com Thu Aug 9 08:55:17 2007 From: marcus.roberts at gmail.com (Marcus Roberts) Date: Thu, 9 Aug 2007 13:55:17 +0100 Subject: File upload issue with Merb 0.3 Message-ID: <4e0e8ed70708090555v6604272s2d25e71dc7054b51@mail.gmail.com> Hello, I have written a Java applet that uses Merb to process file uploads. This works perfectly on Merb 0.1.0. When I upgraded to 0.3.7, all seems to work well, but I then started to see problems - when people uploaded certain files, the ruby process would spin out and start using lots of CPU, never coming back to life. Other files work just fine. The problem is almost certainly in my Java file handling - when I upload the same problem file through an HTML upload form, it works fine. The one thing I did notice was that in the merb log, I would see the first line of the request log entry, e.g.: Request: REQUEST_URI: /upload/applet_upload_file?token=98e4e4f3b55db4ea848b13ad7 01d4aaa,46bae8bc,9084,192,33,1 (2007-08-09 11:13:17) but the next line, e.g. Params:{ ... never appeared - the process would just hang. I assume that Mongrel is doing the work of receiving the file (which is about 8k) before handing it back to Merb, and this is where the problem is occuring, but to help me track it down, does anyone know of any big changes in the way file uploads worked in 0.1.0 and 0.3.7, or could someone give a runthrough of the process when a file upload occurs, and where best to start looking to debug. Thanks Marcus -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070809/2fe9229e/attachment-0001.html From ry at tinyclouds.org Fri Aug 10 13:20:09 2007 From: ry at tinyclouds.org (ry dahl) Date: Fri, 10 Aug 2007 19:20:09 +0200 Subject: serving static files Message-ID: <21ee31950708101020g6e9816eak32a01959a4aa906d@mail.gmail.com> It seems that Merb is sending static files with Mongrel::DirHandler. (mongrel_handler.rb:52) if get_or_head and @files.can_serve(path_info) # File exists as-is so serve it up MERB_LOGGER.info("Serving static file: #{path_info}") @files.process(request,response) I haven't done benchmarks and I've hardly glanced at DirHandler's code but the comment on DirHandler#send_file bothers me: # Sends the contents of a file back to the user. Not terribly efficient since it's # opening and closing the file for each read. Would it be better for Merb to use X-Sendfile in production mode? ry From ez at engineyard.com Fri Aug 10 21:43:29 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Fri, 10 Aug 2007 18:43:29 -0700 Subject: serving static files In-Reply-To: <21ee31950708101020g6e9816eak32a01959a4aa906d@mail.gmail.com> References: <21ee31950708101020g6e9816eak32a01959a4aa906d@mail.gmail.com> Message-ID: <45F446ED-D105-48AA-AA7D-69BDA11B0454@engineyard.com> On Aug 10, 2007, at 10:20 AM, ry dahl wrote: > It seems that Merb is sending static files with Mongrel::DirHandler. > (mongrel_handler.rb:52) > if get_or_head and @files.can_serve(path_info) > # File exists as-is so serve it up > MERB_LOGGER.info("Serving static file: #{path_info}") > @files.process(request,response) > > I haven't done benchmarks and I've hardly glanced at DirHandler's code > but the comment on DirHandler#send_file bothers me: > > # Sends the contents of a file back to the user. Not terribly > efficient since it's > # opening and closing the file for each read. > > Would it be better for Merb to use X-Sendfile in production mode? > > ry > Hey Ry- Merb only sends static files with the dir handler if you are running it by itself. When it is behind a proxy it doesn't serve any static files itself at all. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From ivey at gweezlebur.com Sat Aug 11 22:37:46 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Sat, 11 Aug 2007 21:37:46 -0500 Subject: [PATCH] [TINY] make scripts executable Message-ID: <87AAB8E6-8FB5-489A-A205-938BF16406C9@gweezlebur.com> Super simple patch to chmod 755 the scripts dir in the generator -------------- next part -------------- A non-text attachment was scrubbed... Name: merb-executable-scripts.diff Type: application/octet-stream Size: 510 bytes Desc: not available Url : http://rubyforge.org/pipermail/merb-devel/attachments/20070811/c1f6d24b/attachment.obj From ivey at gweezlebur.com Sat Aug 11 22:14:12 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Sat, 11 Aug 2007 21:14:12 -0500 Subject: [PATCH] merb-rakefile-more-dist-byebye.diff Message-ID: <75EB8CFA-987A-4048-B6B8-90275CF6763F@gweezlebur.com> In rev 410, "rake db:migrate" doesn't run because the Rake tasks are still looking for dist/ This patch removes all the references to dist/ that I could find. Ez, consider this a full copyright transfer from me to you on this and future patches; I'll sign something official if you need it. -------------- next part -------------- A non-text attachment was scrubbed... Name: merb-rakefile-more-dist-byebye.diff Type: application/octet-stream Size: 8643 bytes Desc: not available Url : http://rubyforge.org/pipermail/merb-devel/attachments/20070811/bb3bf027/attachment.obj -------------- next part -------------- From ez at engineyard.com Sun Aug 12 00:16:26 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Sat, 11 Aug 2007 21:16:26 -0700 Subject: [PATCH] merb-rakefile-more-dist-byebye.diff In-Reply-To: <75EB8CFA-987A-4048-B6B8-90275CF6763F@gweezlebur.com> References: <75EB8CFA-987A-4048-B6B8-90275CF6763F@gweezlebur.com> Message-ID: <6400BD6D-22F1-4816-83AB-23DE4A7F3BF5@engineyard.com> On Aug 11, 2007, at 7:14 PM, Michael D. Ivey wrote: > In rev 410, "rake db:migrate" doesn't run because the Rake tasks > are still looking for dist/ > > This patch removes all the references to dist/ that I could find. > > Ez, consider this a full copyright transfer from me to you on this > and future patches; I'll sign something official if you need it. > > > > Hey Michael- Thanks for the patches! Can you do me a favor and submit these to the trac? http://merb.devjavu.com/ Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From ivey at gweezlebur.com Sun Aug 12 08:14:05 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Sun, 12 Aug 2007 07:14:05 -0500 Subject: [PATCH] merb-rakefile-more-dist-byebye.diff In-Reply-To: <6400BD6D-22F1-4816-83AB-23DE4A7F3BF5@engineyard.com> References: <75EB8CFA-987A-4048-B6B8-90275CF6763F@gweezlebur.com> <6400BD6D-22F1-4816-83AB-23DE4A7F3BF5@engineyard.com> Message-ID: On Aug 11, 2007, at 11:16 PM, Ezra Zygmuntowicz wrote: > Thanks for the patches! Can you do me a favor and submit these to > the trac? http://merb.devjavu.com/ Will do. Didn't know there was one. :) From luke.sutton at gmail.com Mon Aug 13 07:42:30 2007 From: luke.sutton at gmail.com (Luke Sutton) Date: Mon, 13 Aug 2007 21:12:30 +0930 Subject: Problems running merb from trunk Message-ID: I have no problems loading any static requests, but any that are routed to a controller blow up. I'm getting a 'Bad controller' error. The reason I'm a bit flummoxed is because the stack trace makes no sense. It terminates on this line: resolve_controller 68 /opt/local/lib/ruby/gems/1.8/gems/merb-0.3.7/ lib/merb/merb_dispatcher.rb As you can see, this is in the merb-0.3.7 gem, but earlier in the stack trace I can see this: run 290 /Users/lukesutton/Pending/merb_test/framework/lib/merb/ server.rb So, even though I'm running merb from the framework dir, for some reason it's calling code in the gem and blowing up. This makes no sense to me :) I'm running this using the script/merb script. You guys have any clues to what I'm doing wrong? -- luke From dscataglini at dancingbeargroup.com Tue Aug 14 13:22:11 2007 From: dscataglini at dancingbeargroup.com (Diego Scataglini) Date: Tue, 14 Aug 2007 13:22:11 -0400 Subject: Does anybody know why activeRecord is not built on top of ruby-dbi? Message-ID: I am curious about the opinionated opinion behind the decision.Was it performance? Complexity? Databases support or something else. I recently used Ruby:dbi and liked all the metadata that comes with the data. Performance looked good but I didn't benchmark it so I don't know which one execute faster. If I am not wrong Ruby:dbi offers true parameters binding which would be nice to have. Let me know if anybody knows why. Thanks Diego Scataglini -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070814/7e7b388c/attachment.html From ry at tinyclouds.org Fri Aug 17 13:08:21 2007 From: ry at tinyclouds.org (ry dahl) Date: Fri, 17 Aug 2007 19:08:21 +0200 Subject: Cookie Sessions in Merb? Message-ID: <21ee31950708171008s767efbc7wc0c91b270d76d020@mail.gmail.com> I like the cookie sessions that Rails edge has - they make sense, they're fast, easy. For those that don't know: the default session mechanism is to give developers a Hash called session. To store this object between requests it Marshals the session object and sends the object itself (now as a bitstream) back to clients to store in their cookie file. To prevent users from tampering with this data, a cryptographic digest (using HMAC with SHA-1) is sent along with the bitstream). The major problem with this scheme is that the Marshalled data is not at all encrypted! Users are free to unmarshal and examine what websites are storing in their sessions. They cannot change the data, but nevertheless this is a security problem! The answers given by the rails developers sound rather na?ve: > This is getting into very difficult crypto. Basically, depending on the cipher, there > may be cases where you can change one part of the text without changing the other. Not that I know much about cryptography, but I'm almost certain that modifying AES encrypted Marshaled data is quite tamper proof. If not, one could at least send a digest along with it. There has been some mention of the extra AES operation slowing down speed (but it's been said it's not much of a slowdown), I think having secure cookies would be well worth the cost. Is there interest in this type of session for Merb? Related: I've just wrote a CookieJar class - perhaps it would be useful for Merb? http://rubyforge.org/pipermail/mongrel-users/2007-August/003890.html ry From ez at engineyard.com Fri Aug 17 13:38:43 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Fri, 17 Aug 2007 10:38:43 -0700 Subject: Cookie Sessions in Merb? In-Reply-To: <21ee31950708171008s767efbc7wc0c91b270d76d020@mail.gmail.com> References: <21ee31950708171008s767efbc7wc0c91b270d76d020@mail.gmail.com> Message-ID: <45E6D9AC-84A8-4EBD-A1A2-B012204A55E7@engineyard.com> Yeah I'd be interested in a cookie store. But th security concerns are valid so we would need to investigate thouroughly Ezra Sent from my iPhone On Aug 17, 2007, at 10:08 AM, "ry dahl" wrote: > I like the cookie sessions that Rails edge has - they make sense, > they're fast, easy. > > For those that don't know: the default session mechanism is to give > developers a Hash called session. To store this object between > requests it Marshals the session object and sends the object itself > (now as a bitstream) back to clients to store in their cookie file. To > prevent users from tampering with this data, a cryptographic digest > (using HMAC with SHA-1) is sent along with the bitstream). > > The major problem with this scheme is that the Marshalled data is not > at all encrypted! Users are free to unmarshal and examine what > websites are storing in their sessions. They cannot change the data, > but nevertheless this is a security problem! > > The answers given by the rails developers sound rather na?ve: >> This is getting into very difficult crypto. Basically, depending on >> the cipher, there >> may be cases where you can change one part of the text without >> changing the other. > Not that I know much about cryptography, but I'm almost certain that > modifying AES encrypted Marshaled data is quite tamper proof. If not, > one could at least send a digest along with it. > > There has been some mention of the extra AES operation slowing down > speed (but it's been said it's not much of a slowdown), I think having > secure cookies would be well worth the cost. > > Is there interest in this type of session for Merb? > Related: I've just wrote a CookieJar class - perhaps it would be > useful for Merb? > http://rubyforge.org/pipermail/mongrel-users/2007-August/003890.html > > ry > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel From mattaimonetti at gmail.com Mon Aug 20 21:12:21 2007 From: mattaimonetti at gmail.com (Matt Aimonetti) Date: Mon, 20 Aug 2007 18:12:21 -0700 Subject: plugins loaded after the models? Message-ID: Hi, I was trying to port attachment_fu to Merb and I realized that adding has_attachment( :content_type => :image, [...] ) in a model would break the app. I realized (let me know if I'm wrong) that the plugins are loaded after the models. Because of that I now have to load my plugin from my model to be able to use it directly. Did I miss something or is there a specific reason why things are loaded the way they are? Thanks, -Matt -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070820/05a0b379/attachment.html From dscataglini at dancingbeargroup.com Thu Aug 23 13:25:44 2007 From: dscataglini at dancingbeargroup.com (Diego Scataglini) Date: Thu, 23 Aug 2007 13:25:44 -0400 Subject: Mailer delivery execution question (drb or not) Message-ID: When I send an email with Mailer does it get processed in a separate detached thread (a-la background-drb) or not? If not the follow up would be: - Is this something that would be a future feature? - Does anybody know of a way to get background-drb working with merb? (it's probably an obvious thing but I am pretty new to the project) Thanks Diego From ivey at gweezlebur.com Sat Aug 25 21:40:19 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Sat, 25 Aug 2007 20:40:19 -0500 Subject: class reloading Message-ID: Ezra, what's the plan for class reloading in dev mode? I was thinking of tackling that as a project, if no one else is working on it. From canadaduane at gmail.com Sat Aug 25 23:52:29 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Sat, 25 Aug 2007 21:52:29 -0600 Subject: Routes patch w/ specs Message-ID: The new routes system is available as a patch, with specs. There are a few specs that fail (6) having to do with mail and content negotiation. I could use some help figuring these ones out. Lots of things have changed, mostly in the dispatcher and controller classes. Let me know what you think, and then let's get this patch applied. http://merb.devjavu.com/projects/merb/ticket/131 Duane From canadaduane at gmail.com Mon Aug 27 10:49:21 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Mon, 27 Aug 2007 08:49:21 -0600 Subject: New Router blog post Message-ID: FYI, I blogged about the new system here: http://blog.inquirylabs.com/ 2007/08/27/new-router-in-merb/ Duane Johnson (canadaduane) From mattaimonetti at gmail.com Tue Aug 28 18:37:47 2007 From: mattaimonetti at gmail.com (Matt Aimonetti) Date: Tue, 28 Aug 2007 18:37:47 -0400 Subject: what's the view format in trunk? Message-ID: dumb question but what's the view format in trunk? I have a simple router: Merb::Router.prepare do |r| # default route, usually you don't want to change this r.default_routes # change this for your home page to be avaiable at / r.add '/', :controller => 'upload', :action =>'new' end I have a simple controller which should render the view: def new @photo = Photo.new respond_to do |format| format.html { render } end end and in my app/views folder I have an upload folder and inside it a new.html.erb file but it doesn't get picked up. No template matched /Users/matta/rails_projects/my_app/trunk/upload_manager/app/views/upload/new.{} I tried adding a .herb file and .html but it didn't help. Thanks, -Matt -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070828/2ee8e56c/attachment.html From boss at topfunky.com Tue Aug 28 23:45:25 2007 From: boss at topfunky.com (Geoffrey Grosenbach) Date: Tue, 28 Aug 2007 20:45:25 -0700 Subject: Non-Erubis Templates Message-ID: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> Trunk Issue: Because of the use of 'autoload', template handlers other than Erubis are not loaded automatically (Haml, XMLBuilder). Either this should be fixed, or the documentation should be updated to instruct people how to use non-Erb template engines. Apparently the solution is to do something like this in merb_init.rb: ::Merb::AbstractController.register_engine ::Merb::Template::Haml, %w[ haml ] So the question is: * Is this the permanent situation for the future? * Can I update the docs to reflect this requirement? Geoffrey Grosenbach http://peepcode.com From B.Candler at pobox.com Wed Aug 29 01:46:16 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 06:46:16 +0100 Subject: Non-Erubis Templates In-Reply-To: <20070829053848.GB26518@uk.tiscali.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> Message-ID: <20070829054616.GA27128@uk.tiscali.com> On Wed, Aug 29, 2007 at 06:38:48AM +0100, Brian Candler wrote: > > * Can I update the docs to reflect this requirement? > > It's now documented the merb_init.rb which is installed by merb -g. But I > agree, History.txt should have info about upgrading existing projects. > > Please see: > http://merb.devjavu.com/projects/merb/ticket/130 > http://merb.devjavu.com/projects/merb/ticket/133 While you're at it, please document the other changed needed to merb_init.rb, which is -conn_options = YAML::load(Erubis::Eruby.new(IO.read("#{DIST_ROOT}/conf/database.yml")).result) +conn_options = YAML::load(Erubis::Eruby.new(IO.read("#{DIST_ROOT}/conf/database.yml")).result(binding)) See http://merb.devjavu.com/projects/merb/ticket/118 Again, this should be correct for newly generated projects. From B.Candler at pobox.com Wed Aug 29 01:35:43 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 06:35:43 +0100 Subject: what's the view format in trunk? In-Reply-To: References: Message-ID: <20070829053543.GA26518@uk.tiscali.com> On Tue, Aug 28, 2007 at 06:37:47PM -0400, Matt Aimonetti wrote: > dumb question but what's the view format in trunk? > I have a simple router: > Merb::Router.prepare do |r| > # default route, usually you don't want to change this > r.default_routes > > # change this for your home page to be avaiable at / > r.add '/', :controller => 'upload', :action =>'new' > end > I have a simple controller which should render the view: > def new > @photo = Photo.new > respond_to do |format| > format.html { render } > end > end > and in my app/views folder I have an upload folder and inside it a > new.html.erb file but it doesn't get picked up. > No template matched > /Users/matta/rails_projects/my_app/trunk/upload_manager/app/views/uplo > ad/new.{} > I tried adding a .herb file and .html but it didn't help. You now need to explicitly load the ERB handler, since it's set to autoload. Just add the following line to conf/merb_init.rb: Merb::Template::Erubis If you start a fresh project you should get a suitable merb_init.rb Regards, Brian. From B.Candler at pobox.com Wed Aug 29 01:38:48 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 06:38:48 +0100 Subject: Non-Erubis Templates In-Reply-To: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> Message-ID: <20070829053848.GB26518@uk.tiscali.com> On Tue, Aug 28, 2007 at 08:45:25PM -0700, Geoffrey Grosenbach wrote: > Trunk Issue: Because of the use of 'autoload', template handlers other > than Erubis are not loaded automatically (Haml, XMLBuilder). Either > this should be fixed, or the documentation should be updated to > instruct people how to use non-Erb template engines. > > Apparently the solution is to do something like this in merb_init.rb: > > ::Merb::AbstractController.register_engine ::Merb::Template::Haml, %w[ haml ] You just need to reference the class in merb_init.rb to trigger the autoload, e.g. Merb::Template::Haml > So the question is: > > * Is this the permanent situation for the future? > * Can I update the docs to reflect this requirement? It's now documented the merb_init.rb which is installed by merb -g. But I agree, History.txt should have info about upgrading existing projects. Please see: http://merb.devjavu.com/projects/merb/ticket/130 http://merb.devjavu.com/projects/merb/ticket/133 From B.Candler at pobox.com Wed Aug 29 03:36:30 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 08:36:30 +0100 Subject: Non-Erubis Templates In-Reply-To: <20070829053848.GB26518@uk.tiscali.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> Message-ID: <20070829073629.GA336@uk.tiscali.com> On Wed, Aug 29, 2007 at 06:38:48AM +0100, Brian Candler wrote: > You just need to reference the class in merb_init.rb to trigger the > autoload, e.g. > > Merb::Template::Haml > > > So the question is: > > > > * Is this the permanent situation for the future? On reflection, it doesn't seem to make much sense to set up autoloading, but then to have to explicitly trigger it. Based on the Merb KISS principle, I think it would be cleaner to just put require 'merb/template/haml' in merb_init.rb, and get rid of the autoload magic (although there's only a tiny bit of that, in lib/merb/template.rb) Does anyone else share this opinion? Perhaps examples/skeleton/conf/merb_init.rb should be changed to say -------------------------------------------------------------------------- # Uncomment the template handers which your application needs to load require 'merb/template/erubis' # .herb .jerb .erb .rhtml .html.erb .js.erb # require 'merb/template/haml' # .haml # require 'merb/template/markaby' # .mab # require 'merb/template/xml_builder' # .rxml .xerb .builder -------------------------------------------------------------------------- and then it doesn't matter whether the autoload stuff is there or not. Regards, Brian. From luke.sutton at gmail.com Wed Aug 29 03:49:47 2007 From: luke.sutton at gmail.com (Luke Sutton) Date: Wed, 29 Aug 2007 17:19:47 +0930 Subject: Non-Erubis Templates In-Reply-To: <20070829073629.GA336@uk.tiscali.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> Message-ID: <379B42F2-09BC-4928-B15F-5470578E763D@gmail.com> On 29/08/2007, at 5:06 PM, Brian Candler wrote: > On Wed, Aug 29, 2007 at 06:38:48AM +0100, Brian Candler wrote: >> You just need to reference the class in merb_init.rb to trigger the >> autoload, e.g. >> >> Merb::Template::Haml >> >>> So the question is: >>> >>> * Is this the permanent situation for the future? > > On reflection, it doesn't seem to make much sense to set up > autoloading, but > then to have to explicitly trigger it. Based on the Merb KISS > principle, I > think it would be cleaner to just put > > require 'merb/template/haml' > > in merb_init.rb, and get rid of the autoload magic (although > there's only a > tiny bit of that, in lib/merb/template.rb) > > Does anyone else share this opinion? I agree with that. Merb's mantra should be 'less magic'. That said I'm not so sure about requiring vs. having an actual method for loading the template engine. Then in the future the templating code can me moved about without disturbing users. Also requiring like that means the code will be pulled in via a gem right? A method for loading the template classes would allow users to stash Merb in the framework directory without having to change the path used in the require. how about something like: templating :erubis Just a thought :) -- Luke From ivey at gweezlebur.com Wed Aug 29 10:07:28 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Wed, 29 Aug 2007 09:07:28 -0500 Subject: Non-Erubis Templates In-Reply-To: <20070829073629.GA336@uk.tiscali.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> Message-ID: <7682FD46-9A2B-4F5B-B3AC-1DD1C44550AD@gweezlebur.com> On Aug 29, 2007, at 2:36 AM, Brian Candler wrote: > On reflection, it doesn't seem to make much sense to set up > autoloading, but > then to have to explicitly trigger it. Based on the Merb KISS > principle, I What about ------------------------------------------------------------------------ -- # Uncomment the template handers which your application needs to load Merb::Template::Erubis # .herb .jerb .erb .rhtml .html.erb .js.erb # Merb::Template::Haml # .haml # Merb::Template:::Markaby # .mab # Merb::Template::XMLBuilder # .rxml .xerb .builder ------------------------------------------------------------------------ -- To me, this is even clearer what you're getting. The more I look at the autoload, the less it feels like magic. Although, Luke's "templating :erubis" suggestion (possibly using the autoload mechanism in the background) seems even better, now that I see it. It could also be smart enough to know that :erb means :erubis, :rxml means :xmlbuilder, etc: templating :erb, :rxml From ry at tinyclouds.org Wed Aug 29 10:19:50 2007 From: ry at tinyclouds.org (ry dahl) Date: Wed, 29 Aug 2007 16:19:50 +0200 Subject: Non-Erubis Templates In-Reply-To: <20070829073629.GA336@uk.tiscali.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> Message-ID: <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> Hi, Why not just autoload Haml (or whatever) when it encounters a .haml template? Perhaps it doesn't do that now but surely this wouldn't be difficult. ry From B.Candler at pobox.com Wed Aug 29 10:30:37 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 15:30:37 +0100 Subject: Non-Erubis Templates In-Reply-To: <7682FD46-9A2B-4F5B-B3AC-1DD1C44550AD@gweezlebur.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> <7682FD46-9A2B-4F5B-B3AC-1DD1C44550AD@gweezlebur.com> Message-ID: <20070829143037.GA20492@uk.tiscali.com> On Wed, Aug 29, 2007 at 09:07:28AM -0500, Michael D. Ivey wrote: > On Aug 29, 2007, at 2:36 AM, Brian Candler wrote: > > On reflection, it doesn't seem to make much sense to set up > > autoloading, but > > then to have to explicitly trigger it. Based on the Merb KISS > > principle, I > > What about > > ------------------------------------------------------------------------ > -- > # Uncomment the template handers which your application needs to load > Merb::Template::Erubis > # .herb .jerb .erb .rhtml .html.erb .js.erb > # Merb::Template::Haml # .haml > # Merb::Template:::Markaby # .mab > # Merb::Template::XMLBuilder # .rxml .xerb .builder > ------------------------------------------------------------------------ > -- > > To me, this is even clearer what you're getting. I actually wrote that :-) > The more I look at the autoload, the less it feels like magic. I could understand the benefit of this approach if the extensions were pre-registered: e.g. module Merb module Template autoload :Erubis, 'merb/template/erubis' register_template :Erubis, '.erb', '.rhtml' end end Then, Merb would search for .erb / .rhtml files, and if it found one and needed to process it, the template handling code would be loaded at that time. But as it is, you get a chicken-and-egg situation: the template extensions aren't registered until the class is used, but the class won't be used until a template matches one of its extensions. So you have to explicitly 'touch' the class to get it loaded. In that case, I argue you might as well just load the class explicitly. As a side point: the current approach also restricts you to the templating modules which are defined in lib/merb/template.rb: namely, module Merb module Template autoload :Erubis, 'merb/template/erubis' autoload :Haml, 'merb/template/haml' autoload :Markaby, 'merb/template/markaby' autoload :XMLBuilder, 'merb/template/xml_builder' end end Of course, a plugin can have its own init.rb which sets up autoload for its own templating class, and then you can explicitly 'touch' the class in merb_init.rb. But why jump through these hoops? Regards, Brian. From B.Candler at pobox.com Wed Aug 29 10:36:30 2007 From: B.Candler at pobox.com (Brian Candler) Date: Wed, 29 Aug 2007 15:36:30 +0100 Subject: Non-Erubis Templates In-Reply-To: <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> Message-ID: <20070829143630.GA21166@uk.tiscali.com> On Wed, Aug 29, 2007 at 04:19:50PM +0200, ry dahl wrote: > Why not just autoload Haml (or whatever) when it encounters a .haml template? > Perhaps it doesn't do that now but surely this wouldn't be difficult. Merb doesn't search for filenames ending in .haml unless the Haml extension has been loaded. Old Merb (0.3.7) simply loaded all the template extensions in regardless. Therefore it would always check for .haml, and process it accordingly. Ezra changed this in trunk r401: http://merb.devjavu.com/projects/merb/changeset/401#file18 This doesn't seem to have been fully thought-through, because not loading the Haml template library means that the code that registers '.haml' as a known extension, and associates it with Merb::Template::Haml, is not run. It would make sense if register_engine were called to register .haml outside of Merb::Template::Haml (but register_engine would have to be modified to be passed a symbol, not a class, because referencing the class would cause it to be autoloaded anyway) Regards, Brian. From ry at tinyclouds.org Wed Aug 29 12:13:27 2007 From: ry at tinyclouds.org (ry dahl) Date: Wed, 29 Aug 2007 18:13:27 +0200 Subject: Non-Erubis Templates In-Reply-To: <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> Message-ID: <21ee31950708290913t78ebb24ftfcefa0d1360f061c@mail.gmail.com> I've posted a little patch for this behavior http://merb.devjavu.com/projects/merb/ticket/152 On 8/29/07, ry dahl wrote: > Hi, > > Why not just autoload Haml (or whatever) when it encounters a .haml template? > Perhaps it doesn't do that now but surely this wouldn't be difficult. > > ry > From canadaduane at gmail.com Wed Aug 29 12:46:26 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Wed, 29 Aug 2007 10:46:26 -0600 Subject: What makes Rails' routes non-thread-safe? Message-ID: <5517B2BB-FB07-4E74-8B9E-63FE927C4BF6@gmail.com> I was reading here and there about the differences between Merb and Rails [1] and became curious about statements such as this: > It is threadsafe with configurable Mutex Locks (Routing is also > threadsafe) Having mucked with the routes system, I had this awful feeling that I don't understand threading well enough to know if my contribution is "thread safe". Can someone help me to understand what makes Merb's routes threadsafe while Rails' is not? For example, does the late- bound procs I've added to the new routing system make it non-threadsafe? Thanks, Duane Johnson (canadaduane) [1] http://www.infoq.com/news/2007/08/performance-ruby-on-merb -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070829/faca0c23/attachment.html From ez at engineyard.com Wed Aug 29 14:52:38 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Wed, 29 Aug 2007 11:52:38 -0700 Subject: Non-Erubis Templates In-Reply-To: <21ee31950708290913t78ebb24ftfcefa0d1360f061c@mail.gmail.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> <21ee31950708290913t78ebb24ftfcefa0d1360f061c@mail.gmail.com> Message-ID: <2037C863-427B-40E5-BF07-F1F1557701D7@engineyard.com> On Aug 29, 2007, at 9:13 AM, ry dahl wrote: > I've posted a little patch for this behavior > http://merb.devjavu.com/projects/merb/ticket/152 > > On 8/29/07, ry dahl wrote: >> Hi, >> >> Why not just autoload Haml (or whatever) when it encounters >> a .haml template? >> Perhaps it doesn't do that now but surely this wouldn't be difficult. >> >> ry >> > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel Yeah the autoload of template engines was not thought thru enough on my part. I wanted to be able to not load haml, markaby and builder if your app doesnt use them since its just overhead and more dependencies. But the current situation does need to be changed. Whatever people think is best is fine with me. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From ivey at gweezlebur.com Wed Aug 29 16:07:07 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Wed, 29 Aug 2007 15:07:07 -0500 Subject: Non-Erubis Templates In-Reply-To: <2037C863-427B-40E5-BF07-F1F1557701D7@engineyard.com> References: <15754f7e0708282045w78ca2c72wdb9351e2763bde53@mail.gmail.com> <20070829053848.GB26518@uk.tiscali.com> <20070829073629.GA336@uk.tiscali.com> <21ee31950708290719q289bdcbaqf345b9e4168de826@mail.gmail.com> <21ee31950708290913t78ebb24ftfcefa0d1360f061c@mail.gmail.com> <2037C863-427B-40E5-BF07-F1F1557701D7@engineyard.com> Message-ID: On Aug 29, 2007, at 1:52 PM, Ezra Zygmuntowicz wrote: > On Aug 29, 2007, at 9:13 AM, ry dahl wrote: > >> I've posted a little patch for this behavior >> http://merb.devjavu.com/projects/merb/ticket/152 > > Yeah the autoload of template engines was not thought thru enough on > my part. I wanted to be able to not load haml, markaby and builder if > your app doesnt use them since its just overhead and more > dependencies. > > But the current situation does need to be changed. Whatever people > think is best is fine with me. +1 for #152. It matches the described behavior of "You can use any of these with no extra config" and it also gets the "Don't load it if it isn't needed. From ez at engineyard.com Wed Aug 29 16:48:00 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Wed, 29 Aug 2007 13:48:00 -0700 Subject: What makes Rails' routes non-thread-safe? In-Reply-To: <5517B2BB-FB07-4E74-8B9E-63FE927C4BF6@gmail.com> References: <5517B2BB-FB07-4E74-8B9E-63FE927C4BF6@gmail.com> Message-ID: On Aug 29, 2007, at 9:46 AM, Duane Johnson wrote: > I was reading here and there about the differences between Merb and > Rails [1] and became curious about statements such as this: > >> It is threadsafe with configurable Mutex Locks (Routing is also >> threadsafe) > > Having mucked with the routes system, I had this awful feeling that > I don't understand threading well enough to know if my contribution > is "thread safe". Can someone help me to understand what makes > Merb's routes threadsafe while Rails' is not? For example, does > the late-bound procs I've added to the new routing system make it > non-threadsafe? > > Thanks, > > Duane Johnson > (canadaduane) > Duane- Mostly the fact that is uses a bunch of alias_method_chain and method redefinition. I didn't dig into to it much further then that. I'll review your new routes to see if I think anything is not safe but I think we're fine. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From merb at dusty.name Thu Aug 30 01:02:32 2007 From: merb at dusty.name (Dusty Doris) Date: Thu, 30 Aug 2007 01:02:32 -0400 Subject: active record alternatives Message-ID: Just wanted to get the opinion from merb users on active record alternatives that you are either using or watching. I've been reading a bit about sequel and data mapper. Both look pretty nice. Anyone actively using those yet? Any others? If anyone cares to provide their thoughts, I'd love to hear them. BTW - is this too off-topic for this list? If so, just let me know and I'll stop posting questions like this. From ivey at gweezlebur.com Thu Aug 30 02:01:35 2007 From: ivey at gweezlebur.com (Michael D. Ivey) Date: Thu, 30 Aug 2007 01:01:35 -0500 Subject: Plugin Manager changes Message-ID: <0C55FD28-7EA6-4CF8-A49E-8F83B944E7B3@gweezlebur.com> I just committed some stuff in PluginManager to actually load the Gem- based plugins from the manifest. Merb::PluginManager.load_plugins is what goes in merb_init to load them all. For every plugin in the manifest, 'theplugin' is required, and then we try and require 'theplugin/merb_init' and, if that fails, we try 'plugin/init' I'll be working on this some more this week and next, to make sure it works as expected. I'll also write some docs. From ez at engineyard.com Thu Aug 30 14:16:01 2007 From: ez at engineyard.com (Ezra Zygmuntowicz) Date: Thu, 30 Aug 2007 11:16:01 -0700 Subject: active record alternatives In-Reply-To: References: Message-ID: <1787183C-AA28-4CFE-9B4D-A1E654C797B1@engineyard.com> On Aug 29, 2007, at 10:02 PM, Dusty Doris wrote: > Just wanted to get the opinion from merb users on active record > alternatives that you are either using or watching. I've been reading > a bit about sequel and data mapper. Both look pretty nice. Anyone > actively using those yet? Any others? > > If anyone cares to provide their thoughts, I'd love to hear them. > > BTW - is this too off-topic for this list? If so, just let me know > and I'll stop posting questions like this. > BothSequel and Datamapper are viable alternatives. I will be pulling out anything ActiveRecord related from merb core and making it a plugin. So merb will be orm agnostic and you will install a plugin to get AR or Sequel or DataMapper when you generate a new app. Cheers- -- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273) From B.Candler at pobox.com Thu Aug 30 15:40:33 2007 From: B.Candler at pobox.com (Brian Candler) Date: Thu, 30 Aug 2007 20:40:33 +0100 Subject: Why Regexp#freeze? Message-ID: <20070830194033.GA15695@uk.tiscali.com> I notice in recent commits that a number of these have been added: /\[(\d+)\]/.freeze I thought that Regexps are immutable. Furthermore, Regexp literals don't generate a new object each time they are encountered: irb(main):001:0> 3.times { puts /\d+/.object_id } -605707646 -605707646 -605707646 => 3 irb(main):002:0> Unlike strings: irb(main):002:0> 3.times { puts "abc".freeze.object_id } -605884514 -605884594 -605884674 => 3 So, could someone please explain why .freeze is beneficial on regexp literals? Thanks, Brian. From mattaimonetti at gmail.com Thu Aug 30 18:40:48 2007 From: mattaimonetti at gmail.com (Matt Aimonetti) Date: Thu, 30 Aug 2007 18:40:48 -0400 Subject: problems with 'no Accept header' request Message-ID: I'm trying to setup a Merb cluster + attachment_fu to handle uploads for a client's Rails app. I'm using Flash to upload the files and I realized that Merb was giving me an error for each upload. It turns out that Flash doesn't seem to send an Accept header and Merb's responder crashes because it's trying to split the missing Accept header. responder.rb line 37 def initialize(accept_header, params={}) MERB_LOGGER.info accept_header @accepts = Responder.parse(accept_header) @params = params @stack = {} end @accepts seems to be later on used in negotiate_content() l84, negotiate_by_format() l92, negotiate_by_accept_header l103 What's the proper way of dealing with this problem? Thanks, -Matt -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070830/b77f873a/attachment.html From canadaduane at gmail.com Thu Aug 30 20:00:28 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Thu, 30 Aug 2007 18:00:28 -0600 Subject: New routing system has specs and examples Message-ID: <989F1624-39BB-46C9-9814-3882A4978A38@gmail.com> Check it out here: http://pastie.textmate.org/92610 Let me know if you have any questions. Duane Johnson (canadaduane) -------------- next part -------------- An HTML attachment was scrubbed... URL: http://rubyforge.org/pipermail/merb-devel/attachments/20070830/c808d045/attachment.html From B.Candler at pobox.com Fri Aug 31 01:48:10 2007 From: B.Candler at pobox.com (Brian Candler) Date: Fri, 31 Aug 2007 06:48:10 +0100 Subject: problems with 'no Accept header' request In-Reply-To: References: Message-ID: <20070831054810.GA12954@uk.tiscali.com> On Thu, Aug 30, 2007 at 06:40:48PM -0400, Matt Aimonetti wrote: > > I'm trying to setup a Merb cluster + attachment_fu to handle uploads > for a client's Rails app. > I'm using Flash to upload the files and I realized that Merb was > giving me an error for each upload. It turns out that Flash doesn't > seem to send an Accept header and Merb's responder crashes because > it's trying to split the missing Accept header. > responder.rb line 37 > def initialize(accept_header, params={}) > MERB_LOGGER.info accept_header > @accepts = Responder.parse(accept_header) > @params = params > @stack = {} > end > @accepts seems to be later on used in negotiate_content() l84, > negotiate_by_format() l92, negotiate_by_accept_header l103 > What's the proper way of dealing with this problem? RFC 2616: " If no Accept header field is present, then it is assumed that the client accepts all media types." So I think you could make Responser.parse return [:all] in the event of nil accept_header being passed in. return [:all] unless accept_header B. From B.Candler at pobox.com Fri Aug 31 15:21:24 2007 From: B.Candler at pobox.com (Brian Candler) Date: Fri, 31 Aug 2007 20:21:24 +0100 Subject: New routing system has specs and examples In-Reply-To: <989F1624-39BB-46C9-9814-3882A4978A38@gmail.com> References: <989F1624-39BB-46C9-9814-3882A4978A38@gmail.com> Message-ID: <20070831192124.GB22846@uk.tiscali.com> On Thu, Aug 30, 2007 at 06:00:28PM -0600, Duane Johnson wrote: > [1]http://pastie.textmate.org/92610 > > Let me know if you have any questions. This is very useful to understand what the new system is capable of, thank you. Could you explain if there some efficiency penalty in using the defer_to syntax? For example, r.match("/::/users/::"). to(:controller => "users", :action => "[2]", :id => "[1]") could potentially be rewritten as r.match("/::/users/::").defer_to { {:controller => "users", :action => $2, :id => $1} } (I'm not sure $1, $2 etc are actually set at this point, but you get the idea). Doing it this way would use more standard Ruby notation for captures than "[1]" and "[2]", which is why I like it. But does using the to(...) syntax allow you to compile the router into a faster form? Regards, Brian. From B.Candler at pobox.com Fri Aug 31 16:51:50 2007 From: B.Candler at pobox.com (Brian Candler) Date: Fri, 31 Aug 2007 21:51:50 +0100 Subject: Bootstrapping from SVN Message-ID: <20070831205150.GA28101@uk.tiscali.com> Is there a simple way to bootstrap merb directly from the Subversion repository, rather than first installing it as a gem? I can do the following if I already have an old gem lying around: merb -g testapp # using an old gem cd testapp rake merb:freeze_from_svn Unfortunately, that means I'm using an old version of the generator. So for example, when I just tried this, the generator made a conf/ directory, whereas the code in trunk expects config/. Equally, I can't test any new features recently added into the generator (such as the snazzy new screens committed in r464-r466), without first building trunk into a gem, and gem installing it over my existing one. I have tried: svn co http://svn.devjavu.com/merb/trunk merb cd merb ruby -Ilib bin/merb -g /var/tmp/test123 but I get: Couldn't find 'merb' generator /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/lookup.rb:159:in `lookup' /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/lookup.rb:164:in `instance' /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/scripts/../scripts.rb:30:in `run' /v/build/merb-trunk/lib/merb/generators/merb_app/merb_app.rb:13:in `run' ./lib/merb/server.rb:216:in `run' bin/merb:6 Cheers, Brian. From canadaduane at gmail.com Fri Aug 31 18:45:14 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Fri, 31 Aug 2007 16:45:14 -0600 Subject: New routing system has specs and examples In-Reply-To: <20070831192124.GB22846@uk.tiscali.com> References: <989F1624-39BB-46C9-9814-3882A4978A38@gmail.com> <20070831192124.GB22846@uk.tiscali.com> Message-ID: <7206E91A-EF64-426A-BFE4-335D47834CFB@gmail.com> On Aug 31, 2007, at 1:21 PM, Brian Candler wrote: > On Thu, Aug 30, 2007 at 06:00:28PM -0600, Duane Johnson wrote: >> [1]http://pastie.textmate.org/92610 >> >> Let me know if you have any questions. > > This is very useful to understand what the new system is capable > of, thank > you. > > Could you explain if there some efficiency penalty in using the > defer_to > syntax? For example, > > r.match("/::/users/::"). > to(:controller => "users", :action => "[2]", :id => "[1]") > > could potentially be rewritten as > > r.match("/::/users/::").defer_to { > {:controller => "users", :action => $2, :id => $1} > } > > (I'm not sure $1, $2 etc are actually set at this point, but you > get the > idea). Doing it this way would use more standard Ruby notation for > captures > than "[1]" and "[2]", which is why I like it. > > But does using the to(...) syntax allow you to compile the router > into a > faster form? > Yes, there is a slight penalty. If you can match without deferring, your routes will be optimized in a big if/elsif statement. With that said, however, the deferred block is evaluated AFTER all other conditions (e.g. only if the "/::/users/::" portion is a match), so you can get away with this slight performance decrease if you restrict your deferred matching to specific portions of the site. With regard to your example above, I think this will work: r.match("/:action/users/:id").defer_to { |request, params| # params = {:action => "some_action", :id => "some_id"} params.merge(:controller => "users") } I had some questions in IRC recently about the defer_to arguments, so perhaps I can repeat it here. The defer_to block takes two arguments, which I prefer to call "request" and "params". The simplest case of a deferred route block is as follows: r.defer_to { |request, params| params } It says, "This route is always a match. Return the params hash, unchanged". You could add conditions, like so: r.defer_to { |request, params| params if ExternalLibrary.matches? } In the case where matches? returns true, the params hash will be returned, and the route will be evaluated as true. In the false case, the if statement returns nil, the route match thus fails, and the routes system will continue checking for matches against other routes down the line. Here's a more practical example of a type-agnostic route where we defer to a block at run-time to determine if the route is a match: r.match("/object/:id").defer_to(:action => "index") do |request, params| thing = GenericObject.find_by_id(params[:id]) if (thing) params.merge(:controller => thing.controller) end end As of revision 467 (a few minutes ago, as of this writing), the "params" hashes passed into the deferred blocks above now include the query_string's parsed params as well as the placeholders parsed out of the path. For example: REQUEST: http://www.mysite.com/object/22392?backdoor=true # Using the example above... r.match("/object/:id").defer_to(:action => "index") do |request, params| # params ==> {:id => "22392", :backdoor => "true"} # ... end Regards, Duane Johnson (canadaduane) http://blog.inquirylabs.com/ From canadaduane at gmail.com Fri Aug 31 18:47:16 2007 From: canadaduane at gmail.com (Duane Johnson) Date: Fri, 31 Aug 2007 16:47:16 -0600 Subject: Bootstrapping from SVN In-Reply-To: <20070831205150.GA28101@uk.tiscali.com> References: <20070831205150.GA28101@uk.tiscali.com> Message-ID: The way I've seen it done is to run "rake install" in a checked out version of merb. Then it just installs a new gem over top of whatever gem your system has. Duane On Aug 31, 2007, at 2:51 PM, Brian Candler wrote: > Is there a simple way to bootstrap merb directly from the Subversion > repository, rather than first installing it as a gem? > > I can do the following if I already have an old gem lying around: > > merb -g testapp # using an old gem > cd testapp > rake merb:freeze_from_svn > > Unfortunately, that means I'm using an old version of the > generator. So for > example, when I just tried this, the generator made a conf/ directory, > whereas the code in trunk expects config/. > > Equally, I can't test any new features recently added into the > generator > (such as the snazzy new screens committed in r464-r466), without first > building trunk into a gem, and gem installing it over my existing one. > > I have tried: > > svn co http://svn.devjavu.com/merb/trunk merb > cd merb > ruby -Ilib bin/merb -g /var/tmp/test123 > > but I get: > > Couldn't find 'merb' generator > /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/lookup.rb: > 159:in `lookup' > /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/lookup.rb: > 164:in `instance' > /usr/lib/ruby/gems/1.8/gems/rubigen-1.0.3/lib/rubigen/scripts/../ > scripts.rb:30:in `run' > /v/build/merb-trunk/lib/merb/generators/merb_app/merb_app.rb: > 13:in `run' > ./lib/merb/server.rb:216:in `run' > bin/merb:6 > > Cheers, > > Brian. > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel