not Ruby on Rails (nor is it "Elixir on Rails"). '/>

Phoenix isn't Rails
20150727



Phoenix isn't Rails

I don't know Elixir very well at all. But I've started to learn Phoenix now. The first thing to know: Phoenix is not Ruby on Rails (nor is it "Elixir on Rails"). I began my learning experience by dutifully crunching through the tutorial and making my share (at least) of newbie mistakes. (Disclaimer: I'm not a web guy. I don't natively "think" in those terms and perhaps never will.)

At some point in the hello-world example, I stopped and did a count of the files under my tree. It will become clear in a moment why this was a little naive and careless.

At any rate, I think find . | wc -lreported 11,648 files to me. I found this a bit confusing and puzzling, and I didn't think it through.

I chatted with Chris McCord and another guy I don't think I've met. This is a summary:

    hal9000: chrismccord: I have a question about the philosophy/design 
              of phoenix - if you have time/inclination and the answer is not too involved
    
    chrismccord: hal9000: shoot
    
    hal9000: first of all, i’m not a web guy - i’ve played with rails and several 
              other things - wrote a few small apps.  One thing that appealed to me 
              about Sinatra was how “lightweight” it was compared to Rails — you can 
              write a primitive Sinatra app in a single file.
    hal9000: i “sort of” expected that Phoenix might be that way — but a find piped 
              to wc showed me that a hello-world app has more than 11,000 files in it. 
              why in general is that?
    
    chrismccord: hal9000: remove the nodemodules folder and re-run ws
    chrismccord: it's all nodejs for the asset building
    chrismccord: hal9000: we are lightweight. It's a misconception I have to keep correcting. 
                 We are much closer to sinatra than rails

hal9000: hmm, i don’t even know nodejs of course hal9000: chrismccord: thanks, i had a feeling i was missing something for sure

chrismccord: hal9000: you could write an app in a single file, but no-one does that, because we don't write production software in a single file chrismccord: hal9000: It is also worth mentioning there is also nothing global in phoenix. We are not a monolith like rails jeregrine: hal9000: something to keep in mind here is that phoenix assumes you are writing production software. Eventually you will need to touch every file, otherwise it wouldn't generate the file hal9000: chrismccord: ok, thanks, i will look more closely. i’m impressed with what i see jeregrine: hal9000: if you are like me and have used sinatra for production software you probably discovered you ended up writing a slightly smaller version of rails

hal9000: jeregrine: that makes perfect sense jeregrine: hal9000: if you only need a single route/api call, and are certain it will never grow, you could VERY easily get away with just plug and it's router jeregrine: hal9000: http://hexdocs.pm/plug/Plug.Router.html for reference. hal9000: chrismccord: i grasp it now, sorry for the noise

jeregrine: hal9000: lemme know if you have any questions, this is something we need to be better at communicating. We are not rails

chrismccord: hal9000: no worries. Sorry if my response was rash too. I just have to fight a lot of "phoenix is bloated" comments because people assume it is given my Rails background and the comparisons with rails

hal9000: chrismccord: no, your response was not rash at all

So first of all: I didn't pay attention to what I was doing when I did my file count.

But the real takeaway here is: Phoenix isn't bloated, and more importantly, Phoenix isn't Rails. The philosophy seems to be more "minimalistic" as I had hoped.

And of course, we all know that Elixir isn't Ruby. I won't belabor that point.

On the other hand, I do find (so far) that Plug is a lot like Rack. That's a good thing, because I always thought Rack was sheer genius. More on that as I learn.


Back Home