
Ask HN: What are real Ruby on Rails alternatives in 2017? - rubyfan
What are the real alternatives to Ruby on Rails in 2017? When I saw “real” I mean, what frameworks offer a wide variety of packages&#x2F;libraries, common integration with “as-a-service” offerings, and have an opinionated methodology for delivering high level web and API functionality rapidly?<p>I hear constant refrain “Ruby is dead” so much so that it reminds me of the situation with FreeBSD many years ago.<p>Admittedly I’m partial to Rails but also love microframeworks too... Sinatra, express, Kemal, iron, etc. but none of those seem to really offer a comprehensive opinionated toolset the way Rails does. There are things that are close but don’t satisfy.<p>Is there anything close in JS&#x2F;ES, Kotlin, Rust, Go, Crystal, Scala or Java 8+?
======
neilwilson
I think it is more 'Ruby isn't sexy any more' because people older than 25 use
it.

It's just the usual thing of the next generation not wanting to listen to the
music the previous generation did.

These things come in cycles. I remember when 'Hot Java' was sexy and cool and
only throwbacks wrote C. (And when C was sexy and cool and only throwbacks
wrote COBOL, etc) There were lots of other languages and frameworks around at
the time too that have long since been consigned to the history books.

I never thought fashion would be a factor in IT engineering, but you realise
over time that the two things you cannot escape are fashion and politics. They
are fundamentally part of the human condition.

If you want long lasting skills in the IT industry make sure you're good at
fashion and politics. They'll take you all the way to a comfortable
retirement.

~~~
o2l
That's a very good insight.

------
danso
Elixir's Phoenix is where a few former Rails folks have migrated to, so it
shares a few of the ideas that made Rails so appealing:
[https://hackernoon.com/phoenix-is-better-but-rails-is-
more-p...](https://hackernoon.com/phoenix-is-better-but-rails-is-more-
popular-8975d5e68879)

A list of companies using Elixir/Phoenix:
[https://github.com/doomspork/elixir-
companies](https://github.com/doomspork/elixir-companies)

Discussion on how Bleacher Report (1.5B pageviews/month) moved from Rails to
Phoenix:
[https://news.ycombinator.com/item?id=13606139](https://news.ycombinator.com/item?id=13606139)

~~~
rubyfan
I used to work at a company in a similar vertical as BR also linked off CNN
frequently and also running Rails. I understand the scalability challenges
that might lead someone to something like Erlang and Elixir.

Curious, what’s your take on why this hasn’t caught on?

~~~
danso
I've only played around with Phoenix/Elixir so can't claim to have any special
knowledge. But I've heard it argued that functional languages/frameworks
aren't as common in startups as expected because functional programming isn't
as popular among current developers, nor as commonly taught in school. And
Erlang seems to be particularly specialized:

[https://news.ycombinator.com/item?id=7277797](https://news.ycombinator.com/item?id=7277797)

Elixir is relatively new (2011), Phoenix even newer. Maybe it's too early to
say whether or not it will take off in the same way Rails did? And maybe it
won't ever take off because Node/Express brings sufficient performance while
allowing developers to use JavaScript, arguably the most popular language in
production today.

~~~
jetti
As somebody who has been diving into Elixir and Phoenix this year I have to
say that the Phoenix way into Elixir isn't as exciting as a backend
application written in Elixir in regards to the power of the language and the
platform. A lot of Phoenix is hidden and is "magic". You don't need to utilize
the OTP at all when using Phoenix and you don't interact directly with what
makes Elixir (and Erlang) so special.

I started using Phoenix and Elixir and while I liked Elixir's syntax better
than other languages I just didn't see what was so great about it. Then I
started doing non-web things with Elixir and it became clear how awesome
Elixir is. I heard the same thing with Ruby back when I looked at Rails 5 or
so years ago. Elixir seems like just another language when you aren't really
digging into the OTP.

------
mtmail
I found Laravel (PHP) to be almost the equivalent to Rails (Ruby) with
[https://lumen.laravel.com/](https://lumen.laravel.com/) similar to Sinatra.
I've coded, tested, debugging in both extensively. That said I don't consider
Ruby declining at all and personally prefer Rails over Laravel (language,
ecosystem, packages, day-to-day coding).

~~~
rman666
+1 for no Rails bandwagon bashing!

------
guu
I think the closest would be Java's Spring Boot:
[http://projects.spring.io/spring-boot/](http://projects.spring.io/spring-
boot/)

I think it is easier to find resources to answer rails questions though.

In addition, many of the languages you list are very young and their
frameworks lack the maturity of something like Rails, Django, Spring, or
Laravel.

I think it's worth asking, why are you looking to switch? If rails is not a
performance barrier for you, then I do not see a good incentive to switch
other than wanting to learn something new.

~~~
rubyfan
Spring doesn’t seem as straightforward to me as I would hope. Play is similar,
there is promise there but just too open ended.

~~~
rubyfan
The funny thing I see on the springboot quickstart page:

 _Absolutely no code generation and no requirement for XML configuration_

And the very next thing is a maven xml config.

~~~
ivan_gammel
It's not a requirement to use Maven, so their statement is correct even in
this extended sense. There's Gradle after all.

~~~
rubyfan
Yes it’s just an ironic presentation.

------
jfaucett
I'm a long time ruby developer and have switched to erlang/elixir now for
about 2 years now. IMHO phoenix is at least as good as rails, personally I
think its most often a better option when building large applications, though
this is due mainly to elixir/erlang and OTP.

Elixir offers production grade options for all the major packages/libs you
need and all the packages I've had to build have been the same kinds of minor
things like api clients or whatever that I had to build a gem for when I was
using ruby.

So phoenix/elixir is certainly a "real alternative" since I've been building
production systems in it for 2 years.

lastly Phoenix is not quite as opinionated as rails, but its still very
opinionated and any rails developer will feel very much at home there.

------
bo77_avantgarde
I have not looked into Elixir Phoenix but have been hearing some noise about
it recently. Folks also frequently compare Rails to Django (Python) ... my 2
cents is Rails has a lot of good tools to build web apps fast and underneath
it all provides a lot of strong functionality. Most things are relative though
to the specific "thing" you're building so I can not say Rails is the best
framework without knowing xyz, but for most web applications I'd stick with
Rails. You get a lot that often gets taken for granted. Nowadays it seems
folks take 1 month bootcamps and come out thinking they know everything and
are so quick to try the next framework. I think that bad implementations, lack
of expertise, and biased opinions has hurt the public opinion on Rails.
Ultimately Rails enables you to quickly build and figure things out. Once your
business is set in stone, the data model is consistent, and you're no longer
figuring it out you can switch focus outside of something like Rails and break
your system up into solid super fast micro-services. It's just my biased
opinion since Rails is "easy" for me. Perhaps Elixir or Django are just as
nice, but ultimately I guess it boils down to the developers themselves, the
mentorship, the team etc. Ruby isn't dead but if in 2017 developers are
banking on 1 language or framework then good luck. Full-Stack problem solvers
is becoming a norm now. Just figure out how to become a strong developer in
general and care less about frameworks that most people / companies abuse and
implement incorrectly all the time. Sorry for the rant but God Damn this Ruby
is dead buzz is so annoying, irrelevant, and usually backed by people using it
incorrectly in the first place.

~~~
rubyfan
Great rant. In a way my question is a challenge the Rails is dead noise. Maybe
I’m an old dog but the stuff I see lately misses the mark. Developers seem to
spend a lot of time thinking about how they’re going to run their
microservices before any functionality is built... there’s something wasteful
there. Rails just works and seems to be faster to solution than any of the
piecemeal approaches I see in the microframework world.

------
LordHeini
I quite like Lift which is a Scala framework allowing stupidly fast rapid
prototyping (rails is really slow and clunky in comparison) . There are no
routes and all the Javascript stuff is built in (so no annoying manual
Ajaxcalls). It is multithreaded via Aktors and has build in comet for async
stuff which is almost trivial to use. The example for using the framework a
life webchat which is a handful of files with a few lines code each. On top
the HTML is, well... proper HTML. No scull operators or such thing. The
framework attaches functionality via css selectors in so called snippets which
are like small controllers but not for an individual view but more for a
specific functionality which helps with reusability. On top you get all the
cool thing from scala like option types, static typing with type inference,
the speed, multithreading and so on.

The biggest downside is the rather awful documentation (often outdated) and
the missing migrations. I found it quite a step to lean since it is not an mvc
framework and inherently stateful. There are a few free books however.

------
saluki
Laravel (PHP) is very Rails like.

I love Rails but clients/projects have pushed me toward using Laravel the past
few years.

It's been a great experience.

Lots of great packages, great community, great tools for deployment Forge +
Envoyer.

Laracasts.com is a great resource to see what it's all about.

~~~
acmecorps
Nooo.. But then I have to use PHP..

I kid, I kid ;)

~~~
saluki
ha . . . this is true.

Laravel makes it tolerable though.

~~~
cutler
Yes, if were not for Laravel's Collections I wouldn't touch it. The biggest
barrier for me with PHP is the idiomatic PSR-driven abuse of blank lines, a la
Kernigen and Ritchie, coupled with code hidden in doc-comments. You're lucky
to find more than 5 lines of code visible on a screen when surrounded by this
code style monstrosity.

------
dudul
Phoenix in Elixir seems to be really appreciated. The Play framework in Scala
is also often mentioned as a very performant tool if
latency/throughput/reliability is really what you are after.

~~~
rubyfan
I’m after productivity ala Rails. Nothing seems to come close for me yet.

~~~
dudul
Have you considered that you feel that Rails is very productive simply because
you know it? What you perceive as intrinsic productivity is just you knowing
the framework/tool very well.

~~~
rubyfan
Sure enough a valid point.

When I didn’t know it I was productive too, circa Rails 0.14.3. I’ve stepped
away for programming for many years and skipped mostly through Rails 3 and 4.
Recently picked right back up in Rails 5 and just as productive as ever.

------
quickthrower2
.net core. With Asp.net MVC.

~~~
2_listerine_pls
Is it dependent on Azure or Windows-only tools?

~~~
bdcravens
Nope:

[https://docs.microsoft.com/en-
us/aspnet/core/publishing/linu...](https://docs.microsoft.com/en-
us/aspnet/core/publishing/linuxproduction)

------
ajitid
Just started with Django, I am praying noone comes to me tomorrow and say
"Django is dying", atleast not for now.

~~~
halfnibble
If someone ever says that to me, I'll still keep using it to the day I die.
And I'll maintain it if need be. Because Django is awesome.

------
afarrell
At GoCardless, we've replaced ActionController with Coach for request handling
while still using the rest of the rails toolset:
[https://github.com/gocardless/coach](https://github.com/gocardless/coach)

It has worked really well for us over the past few years.

------
olavgg
Grails Framewok! [http://grails.org](http://grails.org)

Built on top of Spring Boot.

Awesome performance, both in execution and development speed.

Convention over configuration. But it is still easy to access the rich Java
libraries.

Comes with GORM, an ORM layer on top of Hibernate. Makes it work a lot more
like Active Record with dynamic finders.

Groovy, very similar to Java. Metaprogramming, easier JDBC, execellent, makes
it very easy to work with JSON. Groovy also has performance close to Java.
Java and Groovy can access each other as they have similar byte code.

Very few breaking changes from release 0.4 to 3.3. You can expect that most of
your code will work without needing a rewrite the next 10-20 years.

Superb HTTP parameter binding and validation with Command Objects.

It is a very mature framework and you have full access to Spring Framework.

Great community!

~~~
peller
I inherited a Grails 2 codebase about 8 months ago. I'd never worked with Java
or Spring before, but I have pretty extensive experience with Django, Flask
and Symfony (inspired by Spring, as I understand it). Anyway, from my
perspective, I'm sorry to say I have to strongly disagree with all of these
points - I've never had a more miserable experience with a framework.

<rant>

First off, I found the documentation to be _really_ bad. All of it assumes
you're already deeply familiar with Spring/Hibernate, and it offers zero
direction for those who aren't. Furthermore, Grails has a _ton_ of magic.
Which I guess could be OK, but again, it's all very poorly documented - and
trying to read the source code of Grails itself to get a grasp on what's going
on? Forget it.

Development speed? Hot code reloading pretty much doesn't work; any time I add
or change a route, or a JSON marshaller (aka a serializer in every other
framework known to mankind[0]), or simply add a JS file, you have to restart
the dev server. Which, to top it off, spins up insanely slow compared to a
proper dynamic language.

GORM. Same documentation rant. They cover the simple cases and leave you in
the dark if you need to do anything more complex than a join. Luckily people
on SO are helpful here, but I wish I could understand what the hell is going
on behind the scenes.

Plugin ecosystem? Seems pretty small/inactive, especially compared to Django.
Oh, and each time you install a plugin, expect at least another 30 seconds to
spin up the development server.

Breaking changes? The recommended upgrade path from 2 to 3 is "start a new
project and copy over your files." WTF?

The parameter binding/validation does work pretty well, as long as you don't
try and do anything non-straightforward. But step outside the box, and it
falls apart. And again, the documentation of these magical transformations is
utter shit. Related: no default arguments allowed for controller parameters?
Really guys?

[0] This whole "let's make up a new name for some already widely established
concept/function" appears especially rampant in Groovy/Grails. Not a fan.

</rant>

Perhaps coming from the perspective of JavaLand it's an upgrade, but man, this
shit is not for me. Sorry for the rant.

~~~
vorg
> documentation rant. They cover the simple cases and leave you in the dark if
> you need to do anything more complex

The business model for Apache Groovy and Grails after Groovy creator James
Strachan was pushed out became to hook users in with free open source
software, then charge them for consulting and conferences when they'd amassed
some technical debt.

> The recommended upgrade path from 2 to 3 is "start a new project and copy
> over your files

Virtually no-one's upgrading from Grails 2 to 3, or even starting new projects
in version 3.

------
cutler
For the size of website Rails is optimised for nothing matches Rails IF you're
considering all dimensions rather than just performance. That's because Rails
capitalises on the unique design of the Ruby language. Ruby manages to blend
OO, procedural and functional, taking the best features of Perl, Smalltalk and
Lisp. The result is perfect for creating the kind of DSLs Rails is built on.
Clojure and Elixir come close but they're strictly functional languages. Scala
claims to excel in blending OO and functional but the result is a mess which
has fragmented the Scala community whereas the Ruby community speaks with one
voice.

------
BilalBudhani
I was pondering over the same question some time back which lead me into
experimenting with frameworks in NodeJS and oh boy, I missed Ruby On Rails on
every single line I wrote in those other frameworks. I whole heartedly regret
looking into other frameworks just because I felt Ruby On Rails isn't sexy
anymore.

This experience made me double sure on why Ruby On Rails is one of the
strongest & productive frameworks available. My advice is, don't look anywhere
else if you're not facing any problem with your current stack.

------
neverminder
Play Framework - supports both Scala and Java. It was inspired by RoR to be a
lightweight alternative to such legacy behemoths like Spring. It's a full
featured web framework based on Akka, scalable out of the box. Combination of
Play/Scala/Slick gives you compile time safety for database queries - very few
alternatives can offer that. Also, strict types significantly reduces your
test coverage which is not possible on any dynamic languages.

~~~
ivan_gammel
The comparison with Spring does not make any sense, because Play and Spring
have different scope. Play is just a web layer, Spring is modular general
purpose framework, compatible with different web layer implementations. If you
want to compare "lightweight alternative to legacy behemoth", take the full
feature stack (and mention all other additional libraries you'll need for Play
to match the functionality). I doubt there will be significant difference.

------
1ba9115454
At the moment nothing comes close. Theres are lots of 'Me Too' frameworks but
they don't give enough extra benefit to make it worth switching.

In the future we might see something coming out of Rust, there's a nice HTML
template api which is typesafe and an ORM called diesel which is also type
safe and could give ActiveRecord a run for its money.

------
guitarbill
I know you didn't list Python, but Django works very well. Bit of a learning
curve though. Flask is a microframework (also Python), with emphasis on the
micro.

Django makes some trade-offs that might make it seem like you're less
productive. Maybe it's true, but Django apps are very maintainable in my
experience.

------
sandGorgon
Migrations, asset pipeline, debugger, package management.

I haven't seen anything that has all of these built in.

------
f00_
PHP: Laravel, Lumens Python: Django, Flask, Pyramids, Tornado Java: Spring
Scala: Akka?

most experience with Python

------
rajangdavis
Have you considered hacking together your own? Rails is built on top of other
components (Thor for command line).

I just started hacking together my own and I would say the hardest part (for
me) is file generation.

~~~
rubyfan
The thing that’s cool about Rails is there’s some common understanding of _the
Rails way_ and in theory I can hire easier I have consistency of this working
across versions, etc.

I know when I start a Rails project I’m a few steps away from business
valuable functionality... less so with everything else, there’s like a design
and architecture step that comes first. Sometimes/most times I just want to be
productive.

------
marcus_holmes
Friends don't let friends use frameworks

[http://www.catonmat.net/blog/frameworks-dont-make-
sense/](http://www.catonmat.net/blog/frameworks-dont-make-sense/)

~~~
marcus_holmes
fair enough, I'll take the downvote because it was a bit trolly.

But it's a serious point. Frameworks are not helpful in the long term.

Go has no commonly-accepted web framework because the idiomatic solution is to
use the standard library and write just the code you need. Instead of
importing a tonne of code (and assumptions about your project) that you don't
need.

A framework will help you get something up quickly. But as the project
continues it will get in your way, more and more. I've seen it so many times.

