I've been following this project for 5 years now, and I've really hoped it would take off. However, part of what made (and to some extent, still makes) the Rails framework so great is the surrounding ecosystem of well supported gems that makes building tedious things a breeze.
I built a few things in Phoenix in the past, and while the core framework is very simple and elegant to use, I recall having to write my own file uploading library because the one that existed had almost no documentation. This made me really hesitant to adopt Elixir / Phoenix stack for any projects I'm serious about.
I was hoping there was a world where most of the old rails community moved onto phoenix, but in the time this project has been around, it seems the backend web stack has really fragmented into a multitude of Node, Go, python, etc, while Phoenix hasn't really grown its mindshare.
For former Rails / Django devs who has made the switch: what are your thoughts on this?
In my experience, Elixir and Phoenix are both so straight forward you don't really need to rely on third-party libraries as much as you do in Rails. Some of the things you'd normally reach for a gem to accomplish is just built into Elixir itself (e.g., you don't need anything like Resque or Sidekiq because Elixir processes can do all of that and more for you).
The lack of magic is nice too. For example, it's easy to add a new custom Plug (that you wrote yourself) to your pipeline without resorting to third-party libraries to help you navigate all the magic and boilerplate you'd otherwise have to deal in other frameworks.
This happened to me with Clojure. You really get to appreciate languages with big ecosystems when working on niche languages. It's sad because these languages are more enjoyable to work with IMO. Thy are better cause they had the advantage of being created much later than the mainstream ones but that also means they had hard competition.
Seriously. I would love to work at this level of abstraction in Clojure, but to do something that is trivial in Rails with something like Devise is a chore in Clojure, and you have to put it all together yourself. Of course this makes it excellent for learning, but not so great for deadlines. More and more I think I might've made a mistake trying to do basic CRUD web stuff in Clojure for my current project.
The other side of that coin is the huge amount of unmaintained risk in the Ruby community. When you delegate business logic to someone else's efforts you taking on the risk that the library will be maintained and patched for the lifespan of your application.
As someone else already pointed out, many of the solutions in Elixir are significantly more simple to just "roll your own" rather than have to worry about pulling 50 gems.
That's the same risk you have with any open source project. Elixir and Phoenix have similar risks. I think there's a lot to be said for getting default/easy functionality for free so you can focus on building your unique amazing things vs working on plumbing.
> That's the same risk you have with any open source project.
Yes and no. The larger the number of dependencies you have, and the larger number of maintainers that are behind them, the more chances you have of one of them containing malicious code.
I think you're pretty safe from Phoenix or Rails or NodeJS getting owned because so many people work on them. But one of the thousand small packages you use may belong to someone careless or malicious.
I totally agree. I love phoenix and elixir but it's been hard to roll out a really significant site to production because many of the things you take for granted in the rails world don't exist in the elixir world. Friendly id, acts as follower, public activity, file uploading and more are not as easy in the elixir world as rails. I think rails is still king when it comes to developer productivity but elixir's performance is amazing. And for those of you that are "roll your own", when it comes to business decisions you always have to make a trade off. Heck authentication in the elixir world is just now finally getting official support via a generator (thank Jose!) but it's not even close to devise levels of easy.
You are correct. Phoenix is better, but the community code is not there yet. Having said that... instead of using a big upload library we just do upload + signing for Azure in two very small modules. Sometimes you realize that you might need to write something yourself, true, but also that you don't need to make a full-featured Active/Action library out of it.
Coming from laravel, I've not used phoenix much, but often I find i'll need what a package 'brings' but different, or perhaps I need a package that's not updated for the latest laravel. Often if it's MIT I'll take the code and just put it in a service, modify it so it works w/ latest version, etc...
you could do the same potentially for any rails or laravel package you wanted for phoenix, obviously language constraints would be different and programming paradigm. It'd take a little bit but you could port things over, if you package it up - even contribute to the community growth.
I think choosing a framework solely because of available packages isn't a good thing. I mean nodejs probably has the most packages in it's ecosystem but a lot of them are pure shit.
I built a few things in Phoenix in the past, and while the core framework is very simple and elegant to use, I recall having to write my own file uploading library because the one that existed had almost no documentation. This made me really hesitant to adopt Elixir / Phoenix stack for any projects I'm serious about.
I was hoping there was a world where most of the old rails community moved onto phoenix, but in the time this project has been around, it seems the backend web stack has really fragmented into a multitude of Node, Go, python, etc, while Phoenix hasn't really grown its mindshare.
For former Rails / Django devs who has made the switch: what are your thoughts on this?