My preferred framework of choice for a lot of the web apps I'm playing with these days is Rails. But I've got to tell you there is some stuff that really ticks me off....
First is backward compatibility. 2 years is like a whole new eon in Ruby land. Going from Rails 2 to 3 breaks all sorts of things outright, and other stuff in subtle ways. The community's answer to this is to ensure you've got tests up the wazoo (which is a good thing, but not everything can be automated especially the edge cases). Ruby itself from 1.8 to 1.9 breaks things. Net result for me is locking in gems at specific versions and deferring updates so ultimately this is driving up Tech debt.
As an example, I'm trying to upgrade one of my Shopify Apps to use OAuth because the "old" way is going to be turned off. Of course, the OAuth Gem is not compatible with Rails 2 so upgrade here we come. 2 weeks later and I'm still working through it. Partly because of...
Next pain point is the whole ruby gem nightmare. Maybe it's because of my preferred IDE (RubyMine - which on the whole is awesome by the way) in conjunction with rbenv, but yesterday was blown because after doing a reboot it couldn't find Rails in the SDK. I haven't rebooted for a while so it is likely something I did weeks ago. I tried all sorts of stuff to get it working again - reinstalling rbenv, gems, setting environment variables etc. In the end I closed all projects, rebooted again and restarted the IDE and guess what it starting working again (sort of, now it says I've got the wrong version of rack installed, sheesh!).
It all just feels kind of random and fragile. I don't know what the answer is, but I think this really turns a lot of people off Ruby. In my day job we are planning on moving to a Micro-Service style architecture and it would be great to see some of those implemented in Ruby but the folks who have tried it at some point got turned away after not being able to get their heads around the environmental stuff.
I do see some positive signs. So far ruby 2 seems to play nicely with my existing stuff.
People talk about the drag maintaining backward compatibility would involve (looking at you Java) and how it stiffles innovation. In this case I think the pendulum may have swung a little too far. It may be better to cut down the surface area - E.g. the Asset Pipeline stuff introduced in Rails 3 probably should have been an optional extra, particularly now that our thinking about the performance benefits of it are changing.
Ok, vent over. Thanks for listening!
Update 3 days later: Ok, so to get Rubymine to understand the gems, go to Rubymine > Preferences and delete your SDK. After that a little reset button will appear in the top right. Click that and it sorts itself out.