Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Merb 1.0 Coming Soon, RC1 Available Now

Merb 1.0 Coming Soon, RC1 Available Now

This item in japanese

Release Candidate 1 for Merb 1.0 is now available. Merb's goal is to provide a minimal but powerful core that can be extended through plug-ins, rather than "trying to produce a monolithic library with everything in the core", as stated on its website.

InfoQ talked to Merb's maintainer Yehuda Katz, to give us a picture about Merb:

The main thing to remember about Merb is that we focus on providing a strong set of core features that make very few assumptions. On top of that, we add a set of defaults that can be granularly removed. We spend a lot of time making sure that the defaults are not entangled and very easy to remove should you want to make different assumptions than we have made.

This makes it a lot easier to adapt to new techniques or paradigms (like cloud computing, changes in JavaScript technologies, improvements in Ruby's database support, etc.).

From our perspective, the biggest difference between Merb and Rails is that Merb believes in extremely granular opt-out of defaults that we provide, while Rails requires fairly large opt-out decisions. The Merb stack is more like a stack built of lego blocks, while the Rails stack is like a stack built of Duplo blocks (if you opt-out of an assumption, you're opting out of a lot).

With that said, Merb agrees 100% with Rails' ideas around convention over configuration; we want developers who use Merb to be able to get up and running quickly with a similar set of opinionated assumptions.

Switching frameworks usually takes some time and effort, so we wanted to know how Merb helps a Rails developer with the migration:

The good news is that you can still use your ActiveRecord models, and that controllers and views are similar enough to make a port relatively straight-forward. That said, there are some syntactic and conceptual differences between Merb and Rails, and we should have a list of the differences on the Merb wiki before we release Merb 1.0 final at the end of this month.

There are also two upcoming books on Merb:

I'm working on a book on Merb for Manning, which is already starting to become available via their MEAP program. Foy Savas is also writing a book for Addison Wesley.

In an InfoQ interview in January, a "central plug-in site" was mentioned, what is the status on that?

Part of the 1.0 release involves making the Merb project include a number of common plugins, like authentication, caching, and exception notification, as first-class citizens. We may, at some point, revisit a central plugin repository.

Yehuda recently blogged about improvements in Merb Server, so we asked him to elaborate on that:

Both Merb and Rails have mechanisms for starting themselves up and serving pages. In Rails, this mechanism is script/server. In Merb, it is the merb command. For 1.0, we significantly improved merb's version of the server to add features that were sorely missing in Merb 0.9.

Some examples:
  • Starting up a cluster of Merb servers to bind to specific ports that are already in use does not cause Merb to crash. Instead, Merb prints a notice and waits for the ports to become available. This allows the following deployment solution: (1) update new code on the remote server; (2) load up new merb cluster; (3) kill the old cluster gracefully.
  • It's now fast, easy, and foolproof to reload your code at production time if you have not added additional gems or modified init.rb. Simply run merb --fast-redeploy in the directory in question and all code will be reloaded.
  • If a merb worker process is killed (even via kill -9) it will be instantly respawned. This allows you to have monit kill bloated processes without having to worry about downtime.
In the future, we'll be further improving the merb deployment solution.

 Now that 1.0 is almost out, what is planned for Merb 2?

The plan is to release several 1.x releases over the next year or so that preview features that will be in 2.0. Instead of dropping a big 2.0 release with all of the new features, we will treat 1.x releases as releases that people can use to get familiar with 2.0 features, and as a way to develop Merb 2.0 incrementally, in the Agile spirit.

The big story of Merb 2.0 will be improved support for rapid prototyping, learning from frameworks in the Python community and from other programming languages to make it even easier to get up and running with Merb. We plan to provide further integration with JavaScript libraries, making it as easy as possible to install libraries like jQuery and their related plugins, CSS, and images.

We also plan to further improve the Merb server, to further optimize the memory usage of Merb applications, decrease the overhead of clusters of merb processes, and possibly make it possible to expand and contract clusters of merb processes on the fly.

Merb 1.0 is expected to be released in the coming weeks. The Merb website has installation instructions.

Rate this Article