This tutorial started as a brain dump of my first steps in the world of Erlang, Elixir, Phoenix, etc. I thought it might be useful to share it.
0.1 What is this ?
- Erlang is a general-purpose, concurrent, functional programming language
- Elixir is a dynamic, functional language designed for building scalable and maintainable applications. Elixir runs on the Erlang virtual machine (BEAM).
- Phoenix is a web framework for Elixir.
- Hex is a package manager for the Erlang ecosystem.
0.2 Some links I found useful
- Elixir Nation centralizes the most useful resources
- The Elixir Forum the go-to place to get community support
- What kind of virtual machine is BEAM (the Erlang VM)? [stackoverflow.com]
- Hacker news comments: Elixir 1.5 released
- Hacker news comments: Phoenix 1.3 released
- Why the Elixir language has great potential
- Algolia search on Hacker News for 'Elixir'
0.3 What is this article ?
I had no previous experience with Elixir and I'll show you how to get from this:
A fresh Ubuntu 17.10 install. To this:
A Phoenix test application "hello world" running on localhost.
So there's nothing special with the rest of this article but I wouldn't say there's no value in having a step by step documentation of the toolchain setup, especially if you're new to this. I know it can be tedious to track the different steps required with 15 open tabs, not everything being always up-to-date.
In case I forgot to document some steps, just tell me and I'll update the article
1.1 Installing Erlang and Elixir
Cf. https://elixir-lang.org/install.html. For Ubuntu:
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
For Ubuntu 17.10, the Erlang artful repositories aren't yet available, so you'll have to edit
/etc/apt/sources.list.d/erlang-solutions.list to point to the zesty repository (which works just fine):
$ cat /etc/apt/sources.list.d/erlang-solutions.list ### THIS FILE IS AUTOMATICALLY CONFIGURED ### # You may comment out this entry, but any other modifications may be lost. deb http://binaries.erlang-solutions.com/debian zesty contrib $ sudo apt update $ sudo apt install esl-erlang elixir
Now we can check Elixir is correctly installed:
$ iex -v Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [kernel-poll:false] IEx 1.5.2
1.2 Install phoenix and create a test application
To install the new
phx.new project generator, use the following command:
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
Use it to generate a new project:
$ mix phx.new todoapp $ cd todoapp $ mix deps.get $ cd assets && npm install && node node_modules/brunch/bin/brunch build
1.3 Install Postgresql and create a test database
Your test application is configured to use Postgresql by default. Well need to create test database and get some auth credentials to finalize the Phoenix app setup.
$ sudo apt install postgresql postgresql-contrib # Postgresql was already installed on my machine so I may have skipped some steps. $ createuser --interactive Enter name of role to add: dev Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n $ createdb testapp_dev $ psql psql (9.6.5) Type "help" for help. # ALTER USER dev WITH PASSWORD 'password'; # GRANT ALL PRIVILEGES ON DATABASE testapp_dev to dev; # \q
username: dev, password: password,
And run the following command:
$ mix ecto.create
For your information, Ecto is a database wrapper and language integrated query for Elixir.
1.4 Launch the Phoenix app
If everything is correctly setup, the following should sufficient:
$ mix phx.server
If you get an error message regarding
inotify-tools, just install it:
$ sudo apt install inotify-tools
Finally open the website:
$ firefox http://0.0.0.0:4000/
Now we have setup everything to start some Elixir & Phoenix programming like in these examples:
- Phoenix, React, Redux example: real-time collaborative TODO app
- Elixir blog in 15 minutes using Phoenix framework - Step by Step
Those examples are from 2015, I'll try do something up-to-date for my next article, when I get some time... and some more inspiration :)
Thanks for reading !