
The ease of mocking/stubbing - I knew java programmers who would create an interface for every single class they had so they could stub it out in tests. Other tools are catching up with some of the testing practices which originally made ruby great. They won't learn something new when python does an adequate job of writing a web app. Combine this with tensorflow, means a lot of modelers are learning python and will only pick up more strongly typed faster languages for certain tasks that require tight execution. Python has taken over scientific computing and is now the default for "anything that can afford to be slow" in a lot of places, such as google and where I used to work to name a few. This even works for jsonb columns and is honestly super convenient. With the PG gem, you can get the type mapping of your results directly from postgres, haven't seen that easily done in other languages yet (obviously impossible with stronger typed languages). It might sound crazy, but I've even used ERB to template SQL for some more complicated queries (obviously not putting that in a views directory, just inline templating a string). I prefer building new stuff in sinatra, and pull in activerecord if you really need it but honestly stuff like Sequel or even a thinly wrapped internal PG::Connection can be very convenient. It's attempted the level of dogmatism achieved by python, but it's a lot harder to learn and the backwards incompatibility is at least as bad.
#The battle cats hack 3.1.0 upgrade#
The fact that it's slow in additional to being a pain to upgrade just adds fuel to the fire.

Rails is kind of a mess and everyone who's had to upgrade a bunch of rails projects knows it. IMO the reason ruby is getting left behind:
