You can also fork/vendor the gem and fix it, vs rewriting the whole thing from scratch. If a gem is abandoned you don't need to nuke it - you just take ownership of the code. Essentially if you use a gem you are saying "this code is as good as our code" so just maintain it just like it is your code.
And you can use https://railsdiff.org/ to check what you're missing in upgrade apps. Anything other thing that breaks would most like come from another gem, which doesn't make it Rails' fault or Ruby itself, in the case of Ruby, you can track everything to the source to fix it. Ruby keeps a change log diligently. Everything is trackable, at least in my experience.
Even with very high test coverage on a large app it is a huge and high risk effort to upgrade - there are so many deprecations and unnecessary behavior changes. The `belongs_to` now validates presence was especially egregious and arbitrary. Of course you can turn it off with a variable - but now we have a rails app that is a mix if defaults from 4 different versions of rails.
Every single Rails update is extremely painful and issues will slip through every unit test and browser automation you can come up with. Stuff that would be trivially catchable with type checking.
But upgrading pure API Rails projects is much less painful
> upgrading to newer versions of RoR sucks
This hasn't been my experience at all. Rails comes with a built-in tool that interactively helps you upgrade your app `rails app:update`. Even on a 300k+ line Rails app I work on, our last major Rails upgrade took a single engineer about a week to do. It could be better, but it's one of the easier frameworks to upgrade, in my experience.
> The more time I invest in trying to like RoR the more I end up having to fork gems to patch them because upgrades cannot be made smoothly
Isn't this the case generally? Dependencies are liabilities. Not sure why this is a problem with Rails?!
> It so easily integrates ActiveRecord, and heavily encourages it, that when you want to pull out of using it it’s a huge pain.
ActiveRecord is a central component of the Rails framework. Why would they encourage you to use an alternative?
> Test suite combines unit and integration testing.
I think it's first important to state upfront: there is no single canonical definition of "unit" or "integration" tests. I assume your point is that the standard unit test examples in Rails hit the database? That being bad is, like, your opinion, man. And you totally can decide to not design things that way.
Even with the evolution of Ruby on Rails and adding more rich feature sets, I wouldn’t recommend it as an out of the box Webapp BECAUSE upgrading to newer versions of RoR sucks.
The more time I invest in trying to like RoR the more I end up having for fork gems to patch them because upgrades cannot be made smoothly.
It so easily integrates ActiveRecord, and heavily encourages it, that when you want to pull out of using it it’s a huge pain.
Test suite combines unit and integration testing.
It’s been a net loss imho to learn and work with it over the years.
I’ve been waiting to be persuaded otherwise.