
Rails 3.0: It's ready - steveklabnik
http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done
======
ezmobius
Not to cry sour grapes here but there is not one mention of Merb in that
entire blog post. I personally wrote merb in order to show that rails
internals could be much better, modular and faster. I did heavy duty
politicking to get the two teams to come together and I think the rails merb
merger is one of the coolest open source success stories vie heard of.

But not a single mention of merb in this entire post. I'm not complaining but
it seems disingenuous not to mention it as the sole reason I wrote merb was to
push rails forward. And when it looked like merb might possibly overtake rails
I went ahead and gave merb to the rails project and got the two teams together
so there wasn't wasted effort. After all to have ruby and rails itself win we
needed to compete with java and python and php. Merb was starting to fragment
the ruby community as it became a more and more viable option and I did some
personal heavy politicking to get it merged back into rails so we could take
on the world instead of infighting within the ruby community.

I think it's been a great success story and most of the ideas of merb's
architecture have made it into rails.

So I'm incredibly happy to see rails 3 finally come out. And I'm incredibly
happy that my little experiment in making rails architecture better has paid
off and the two projects merged. But I do think it's a bit weak that merb was
not mentioned once in the article.

(Edit) all this being said I don't want to come across as co plaining. My work
on merb ended up exactly as I wanted it to, it made rails better.

So huge congratulations to the rails team for making this happen!

(Edit) <http://rubyonrails.org/merb>

~~~
jamesbritt
"Merb was starting to fragment the ruby community as it became a more and more
viable option and I did some personal heavy politicking to get it merged back
into rails so we could take on the world instead of infighting within the ruby
community."

Interesting, if disheartening, perspective.

I much prefer to see greater diversity within a language. I want to see more
frameworks, more exploration, more choice. What some may call fragmentation is
in fact rich and vibrant and valuable.

And the idea that there is some sort of battle going on among languages, that
Ruby needs to "win" against Java or PHP or any language, is truly perverse.

I fear this battle mentality is by no means a minority opinion among Rubyists.

I prefer to use Ramaze for Web development, but I'm glad people can pick
Camping or Wave or Wuby or IOWA or Sinatra or any of the dozen other options
out there. There are interesting things being done, and not simply so they can
be subsumed by some One True Framework.

I was disappointed not to see Nitro get the attention it deserved, to have
Chad Fowler tell a conference audience that people working on Nitro should
just _stop_ , because "Rails won", was a turning point in how I viewed the
larger Ruby culture.

There are many smart, adventurous people doing interesting things with Ruby,
but there is also a pervasive cliquishness and neophobia regarding anything
that is not somehow tied to Rails.

It's great to see progress made in Rails, but the solidification of Ruby ===
Rails leaves a bad taste.

~~~
robryan
It needs to at least compete with Java/PHP ect. In order to create a big
enough ecosystem to provide all the libraries and core features needed and
keep them up to date. As well as have enough people explaining things that new
people don't feel overly intimidated.

~~~
ssmoot
"It needs to at least compete with Java/PHP ect."

Why?

And you know what? It never will. Rubyists need to give this up. It's a pipe-
dream. Microsoft can set up large/local conferences, charge $75, and make a
sales pitch. Dozens of vendors lined up to hand out schwag and pitch their
product.

For management, they don't get the _best_ tool, but if it meets requirements,
then it's a no-brainer because the most expensive component license is
(usually) cheaper than the dev time to meet the basic requirements in-house
(those are usually a small subset of what the component might do).

The bigger issue is that that sort of buy vs build scenario manages risk very
well.

Ruby has a lot of strengths, but providing a strong story for managing risk
isn't one of them. Especially if you don't bill by the hour.

The world of software development isn't winner take all. The same things that
can make Ruby and Rubyists great are some of the same reasons it likely won't
ever be a good fit for some of the mass-market issues Java and .NET are a good
fit for.

That's OK in my book. I die a little on the inside every time someone tries to
sound smart by saying "use the best tool for the job" when often there are
clear and obvious winners and losers in software. But in this case... Use the
best tool for the job. Or maybe just the tool you like most. If Ruby works for
you and your company, you're already doing the risk management thing very
well. No reason _not_ to use it.

------
steve19
Not a single mention of Merb in the entire blog post.

~~~
melvinram
A comment from DHH in the comments of the post:

it long since stopped being about a Rails and a Merb team. Today there’s just
a Rails 3 team where everyone is working together for the improvement of the
framework.

See
[http://contributors.rubyonrails.org/contributors?window=this...](http://contributors.rubyonrails.org/contributors?window=this-
year) for work done this year. More than 350 people who has commits this year.
No factions, just collaboration.

------
viraptor
Does AR really work like this?

    
    
        users = User.where(:name => "david").limit(20)
        users.where("age > 29")
        
        # SELECT * FROM users 
        # WHERE name = "david" AND age > 29 
        # ORDER BY name
        # LIMIT 20
    

It seems a bit counter-intuitive to me. I'd expect that

    
    
        User.where(:name => "david").limit(20).where("age > 29")
        =/=
        User.where(:name => "david").where("age > 29").limit(20)
    

Yeah - just nitpicking, but it caught my attention.

~~~
melvinram
It may seem counter intuitive at first but here's the thing to understand:

> users = User.where(:name => "david").limit(20)

Does not actually do any calls or create any kind of sql by itself. When you
follow it up by

> users.where("age > 29")

all you're telling the users object is that you want to add a condition to
your next query. You are not telling it to refine the previous query.

To get what you want, you'd need to do:

> users = User.where(:name => "david").limit(20).all

> users.where("age > 29")

~~~
Raphael_Amiard
Well, you could do it the django way, where you can't filter a queryset after
a slice has been taken (eg. limit has been used)

This is ten times more logical if you ask me.

~~~
emmett
It's very convenient to be able to pass a partially built query, including a
limit, into a function which adds more conditions. Why would you not want to
be able to do that?

~~~
Raphael_Amiard
Because the meaning of it is totally counter intuitive, for one ?

------
Groxx
> _Say goodbye to encoding issues_

And good riddance! Utterly _thrilled_ to hear this.

~~~
troels
Bold words. I can guarantee that encoding issues will prevail. They may be of
another sort, but they will never go away magically.

~~~
Groxx
Certainly. But you _can_ remove the ones you create (to reach "zero"), and
patch some of the ones you don't (to reach... "-zero"?).

------
dhh
We've designated a release charity for people to show their appreciation of
Rails 3. If you're going to use it, please help us bring clean water to 5,000
people with Charity:Water.

You can donate on <http://mycharitywater.org/rails3>

------
grinich

        Status: 500 Internal Server Error
    

Maybe not quite yet?

~~~
dhh
Fixed the issue. The weblog is a prime example of cobbler's shoes. I think
it's running Rails 0.5 on a machine that hasn't been updated in 6 years.

~~~
duck
Speaking of, you might want to get rid of the mephistoblog.com link since it
is no longer valid.

~~~
dhh
I want to nuke that entire installation from orbit. It's the only way to be
sure that it's gone.

~~~
steveklabnik
I mean, it should only take 15 minutes to build a new one, right? ;)

~~~
die_sekte
And at least one "WHOOPS!"

------
jreposa
For anyone using Rails 3 with haml, upgrade haml to 3.0.18...

    
    
      bundle update haml
    

I lost a few hours looking for the issue where form_for was silently failing.

Great support though. Here is a discussion of the issue and resolution.

<https://rails.lighthouseapp.com/projects/8994/tickets/5493>

------
steveklabnik
It's 500-ing, so here's a pastie of the text: <http://pastie.org/1125097>

------
moeffju
I just realized this going through the API docs when I noticed the docs for
3.0.0 were now live on api.rubyonrails.org. Finally! (Of course, just two
hours after converting one app from rc1 to rc2.)

------
c00p3r
die, J2EE, DIE! ^_^

------
pibefision
Congratulations!

------
melvinram
Awesomeness!!

------
amix
Instead of making things more simple they have made a lot of things more
complex and "configureable". I think Rails 3 is a great example of over-design
and over-engineering. I don't really think web-frameworks need to be this
complex.

If people want to control their own stack with minimal code and complexity
they should check out Python's WSGI interface and the tools that are built
around it. You can in an afternoon tie your own framework using tools like
werkzeug, mako and sqlalchemy. You can be the master without following other
people's lame conventions.

~~~
ptn
I'm about to learn Rails 3, please, which parts of it you think are complex,
over-designed and over-engineered?

~~~
epochwolf
I'm using rails 3. OP is full of crap. Rails is a full stack framework
complete with ponies, unicorns, and rainbows. Asking it to be minimal is a
joke, but you can get rails pretty slimmed down if you work at it. You
wouldn't want to build a full app on ActionController::Metal but you can.

The redesign has made the internal code of rails much simplier and ActiveModel
is simply brilliant. I'm using CouchRestModel and having ActiveModel means I
can use plugins like Formtastic right out of the box.

Rails 3 decoupled the major components. It's more modular now. I can disable
ActiveRecord without the plugins I'm using getting upset that it's missing. If
anything, this makes the framework less complex because you don't have to
worry about interplay between the components.

