
Effortless Elixir Releases and Deployment - AlchemistCamp
http://alchemist.camp/articles/elixir-releases-deployment-render
======
AlchemistCamp
This is really great to see that at least some people have found my tutorial
useful!

It's also interesting to see how much traffic being on the front of HN sends.
So far it hasn't broken 200 requests in a minute
([https://pbs.twimg.com/media/ECJVktXUEAE9kVN?format=jpg&name=...](https://pbs.twimg.com/media/ECJVktXUEAE9kVN?format=jpg&name=small))

This is about 1/100th the traffic I load tested it to handle on a $5 Digital
Ocean droplet (which I later upgraded to $10 due to TypeScript compilation
using too much memory a different project).

Also, I completely forgot to set up any caching or any rate limiting on
"articles" which are a new kind of thing on my site. Of course, it could
easily be taken down with a DDOS.

But in the big scheme of things, this validates my belief that most people
(including me) spend _way_ too much time worrying about scalability in early
stage projects!

~~~
whizzkid
You can save back your 5$/month by increasing your machine’s swap space. I did
the same when more memory was only required for compiling.

[https://www.digitalocean.com/community/tutorials/how-to-
add-...](https://www.digitalocean.com/community/tutorials/how-to-add-swap-
space-on-ubuntu-18-04)

~~~
freehunter
Does anyone know how accurate their warning about swap space on an SSD is? I
know SSDs have limited reads and writes and swapping to them obviously uses
those limited reads/writes, but how much of a concern actually is it?
Especially if you're only using swap during the compile/deploy step?

~~~
whizzkid
As soon as you hit some kind of limit it will abort the process and output the
error. So you will be notified about it and it wont go unnoticed. And if you
only use it during compile and deploy then you are at no risk :)

(ps: bad grammar, on mobile)

------
arcturus17
I’m primarily a React / Node dev, but I’ve been thinking about picking up
another language and framework for a while. I feel like Node / Express is
great, but I also sometimes feel like it’s not a proper framework, in that you
end up assembling a lot of code by hand (ex: auth, data modeling) and after a
few projects it’s tedious. Also, Node only offers concurrency as an unnatural
afterthought...

I’ve dabbled in Django and it seems to solve some of those problems, but I
also feel like web programming in an OO dynamic scripting language isn’t that
far away from doing it in JS so I might as well learn something mind-blowingly
new...

I’ve been exposed to functional programming in OCaml in a rigorous college
course and absolutely loved it, how would you guys rate learning Phoenix +
Elixir in my case?

~~~
0xADEADBEE
I think you're right to explore something else and I'm not aware of anything
better than Elixir/Phoenix in the Web Framework world currently. It's
incredibly well thought out and an absolute joy to use once you get through
the initial learning curve.

I spent many years doing Python before getting talked into learning Clojure
and it was incredibly eye-opening and made me a much better developer, so
there is no bigger partisan than me for trying something completely different
to your current skill-set. Give it a go!

~~~
dominotw
why is elxir/phoenix better than clojure/luminus?

~~~
knowmad
They a pretty comparable, I think the reason elixir is gaining more
popularity, is mainly due to it looking like ruby rather than lisp. Also, I
personally feel like the BEAM is better for handling concurrency than the JVM.

------
verttii
This is one of the first hands-on tutorials available on v1.9 mix releases -
great content!

------
aloukissas
Great writeup (even though it doesn't touch upon Distillery). Even cooler is
that I discovered Render through this post.

~~~
AlchemistCamp
Almost all the previous deployment screencasts I did used Edeliver and
Distillery. That's what I do for my primary projects. It's a slightly more
complex setup, though.

------
akoutmos
Great post and thanks for sharing! I've been seeing quite a bit of Render
these days. Does anyone have any production experience with it and what are
your thoughts? Also for those interested in using Elixir 1.9 releases along
with Docker, I wrote a blog post a couple months ago:
[https://akoutmos.com/post/multipart-docker-and-
elixir-1.9-re...](https://akoutmos.com/post/multipart-docker-and-
elixir-1.9-releases/)

~~~
AlchemistCamp
Indie Hackers runs Render in production.

~~~
barkerja
First time I'm hearing of this community; first glance, it looks great!
However, I was trying to check out the content in the footer, but the
scrolling pagination makes it impossible. :(

~~~
AlchemistCamp
Yeah, the UX on IH frustrates me sometimes, too.

Courtland has said before that he regrets going all in on making it a SPA
instead of a more traditional back-end MVC. But he wanted to learn Ember and I
can totally get that.

------
karl_schlagenfu
Is there a performance difference between Elixir and Erlang? I assume not
since they both run on BEAM but I've never dabbled with Elixir.

~~~
gervu
Between Elixir and Erlang, there's no difference because it's all BEAM
bytecode when it runs.

Between arbitrary individual functions you might encounter, there can be
differences, but only in the sense that it could happen between Erlang and
Erlang if the functions had different implementations or degrees of
optimization or optimization choices.

Worth noting for prospective adopters is that you can seamlessly call Erlang
functions from Elixir by adding a : prefix, such as :random.uniform(), and
there's no weird overhead or surprises involved.

------
rkachowski
I'm really not being facetious here, but I want to ask - why not deploy this
in docker containers?

------
cultofmetatron
this looks awesome and is a great writeup.

Is it possible to use
(peerage)[[https://github.com/mrluc/peerage](https://github.com/mrluc/peerage)]
to setup autodiscovery between vms like you can in gcp?

~~~
AlchemistCamp
I'm not sure about peerage specifically, but here's an example with libcluster
set up to discover nodes automatically when they join (or leave):
[https://render.com/docs/deploy-elixir-
cluster](https://render.com/docs/deploy-elixir-cluster)

