rod mclaughlin

Tried clicking on the 'Updates' button on my Ubuntu Linux toolbar,
and found that 'libxml' is one of them. So update system, and reboot...

No luck

And so on, and on... dependency hell... just to run the tests

Why is Merb so incompatible with Ubuntu, when Rails is always so easy?

See How to Install Rails on Ubuntu
Sean McCleary says 'This technique has been proven to resolve the issue for Debian and therefore Ubuntu machines':

sudo apt-get install libxml-ruby libxslt-ruby libxml2 libxslt1-dev sudo gem install nokogiri sudo gem install webrat Successfully installed webrat-0.3.2 1 gem installed

Thanks, Sean!

Now, where was I?

Oh yeah, testing...

rake spec
...lots of errors
...but that's good, isn't it?

Authentication tells you how to set up authentication - except, as usual, Merb has changed since it was written.
It says put
   dependency ‘merb_auth_password_slice’
in init.rb, but what you really need to do is put
   dependency 'merb-auth-slice-password'
in dependencies.rb.

Then it says
'If needed, configure which slices to load and in which order
   Merb::Plugins.config[:merb_slices] = { :queue => [“MerbAuthPasswordSlice”, ...] }'
...but how do you know if it's needed?

Compared to this, acts_as_authenticated for Ruby on Rails was a breeze - see‘act-as-authenticated’/.

'Setup your application to use MerbAuthPasswordSlice in an after_app_loads block'
The instructions only make sense if you already know how to do it,
and therefore don't need the instructions.

Bradly Feeley at
told me in idiot-proof steps how to set up
Merb Authentication. I reproduce it below:

Lets start at the beginning and create an app
$ merb-gen app authentication_app
$ cd authentication_app

By default merb-gen app will create a user model for you in app/models/user.rb. The model is there, but we still need to create the table in the database and add a user to authenticate with. Lets do that now.
$ rake db:auto_migrate

To create our first user we can drop into Merb's irb console mode with merb -i. Like Rails' script/console, merb -i gives you access to your models and other classes.

$ merb -i
u =
u.login = 'joe'
u.password = u.password_confirmation = 'password'

In order to test authentication we need something to protect.
Any controller would work, but lets create a resource.
$ merb-gen resource secret

We will need to add a route to the resource also
# router.rb
Merb::Router.prepare do
resources :secrets

To protect a controller with authentication we can use the before filter ensure_authenticated
# app/controllers/secrets.rb
class Secrets < Application
before :ensure_authenticated

Everything should now be setup in our app. Lets give it a run through.

First you need to start you merb server. Make sure you are in your merb app’s root directory.
$ merb

Now you can test access to your resource is denied before authentication.

Login in and try to access the recourse again.

You should now be able to access the resource. Awesome.

This worked immediately.

Thanks Bradly!

I now have a Merb app which forces you to log in in order to access, edit or add articles, which you do with a wysiwyg html editor.


Portland London