To be more accurate, Chef 12 only supports Ruby 1.9.3+. Why is 1.9.3 not backwards compatible with 1.9.2 though?
Chef is one of the worst pieces of software I’ve had the displeasure of using. It is meant to the foundation of your entire organization and it is more complicated than the systems many organizations will create. I think it has four databases in it. It’s a mess. Even if the implementation was not terrible, the actual semantics of Chef are horrible. A single variable has 15 levels in which its value can come from depending on what point in time you’re run is in. It uses Ruby as a ‘DSL’, which is really just nonsense because there is nothing domain about it. People end up putting code with side effects in places where there should only be variable assignments, but since it’s Just Ruby, it won’t stop you from doing something that is always wrong. Cookbooks are, in general, not very composable. People are figuring out how to make them composable but it involves a lot of boilerplate. It’s so heavy to do things right in Chef that it’s frequently not worth it. The authors have also strayed away from taking any responsibility for best practices within the community, creating a chaotic and frequently breaking ecosystem as people are forced to figure things out for themselves.
I use chef at work, and parts of it certainly are painful. I do prefer it to puppet and older alternatives (we started using it about 3 years ago). I would probably use ansible or salt if we were starting over today.
That said, chef-solo (which we use) is much nicer to use than chef+chef-server. The chef server setup and stack is an awful mess.