Phoenix es un framework, escrito en elixir, en el cual vamos a poder crear aplicaciones web dinámicas, phoenix es para elixir lo que rails es para ruby, o como django es para python, solo que aun mejor, nos permite crear aplicaciones de manera más organizada lo que nos va permitir trabajar de manera un poco más eficiente.
Instalación
Para instalar phoenix, necesitaremos tener instalado elixir y erlang, te dejo aquí como puedes instarlos Elixir y Erlang.
Hex
La instalación de phoenix sería de la siguiente manera. Primero tenemos que instalar el administrador de paquetes hex.
$ mix local.hex
Comprobamos que tenemos instalado correctamente elixir y erlang.
~$ elixir --version
Erlang/OTP 23 [erts-11.1.7] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
Elixir 1.11.2 (compiled with Erlang/OTP 23)
Instalación Phoenix
Luego de comprobar que tenemos instalado elixir y erlang podemos instalar elixir phoenix.
$ mix archive.install hex phx_new 1.5.8
Es importante decir que phoenix pide que tengamos instalado node js para poder compilar los assets de la aplicación, también usará npm para instalar dependencias lo cual hará que instalar node js no sea opcional.
Instalar nodejs
sudo apt-get install -y nodejs
Así también tenemos que instalar postgresql, para instalarlo y saber un poco mas te dejo esto Postgresql. Phoenix va a configurar las aplicaciones para que lo usen de manera predeterminada, pero podemos usar otros gestores como MySQL o MSSQL. Phoenix utiliza otro paquete de elixir para comunicarse con las bases de datos, este paquete es ecto.
Luego de haber instalado todo, solo nos haría falta crear una aplicación en phoenix y ponerla a correr.
$ mix phx.new hello
Con esto creamos un nuevo proyecto.
* creating hello/config/config.exs
* creating hello/config/dev.exs
* creating hello/config/prod.exs
* creating hello/config/prod.secret.exs
* creating hello/config/test.exs
* creating hello/lib/hello/application.ex
* creating hello/lib/hello.ex
* creating hello/lib/hello_web/channels/user_socket.ex
* creating hello/lib/hello_web/views/error_helpers.ex
* creating hello/lib/hello_web/views/error_view.ex
* creating hello/lib/hello_web/endpoint.ex
* creating hello/lib/hello_web/router.ex
* creating hello/lib/hello_web/telemetry.ex
* creating hello/lib/hello_web.ex
* creating hello/mix.exs
* creating hello/README.md
* creating hello/.formatter.exs
* creating hello/.gitignore
* creating hello/test/support/channel_case.ex
* creating hello/test/support/conn_case.ex
* creating hello/test/test_helper.exs
* creating hello/test/hello_web/views/error_view_test.exs
* creating hello/lib/hello/repo.ex
* creating hello/priv/repo/migrations/.formatter.exs
* creating hello/priv/repo/seeds.exs
* creating hello/test/support/data_case.ex
* creating hello/lib/hello_web/controllers/page_controller.ex
* creating hello/lib/hello_web/templates/layout/app.html.eex
* creating hello/lib/hello_web/templates/page/index.html.eex
* creating hello/lib/hello_web/views/layout_view.ex
* creating hello/lib/hello_web/views/page_view.ex
* creating hello/test/hello_web/controllers/page_controller_test.exs
* creating hello/test/hello_web/views/layout_view_test.exs
* creating hello/test/hello_web/views/page_view_test.exs
* creating hello/lib/hello_web/gettext.ex
* creating hello/priv/gettext/en/LC_MESSAGES/errors.po
* creating hello/priv/gettext/errors.pot
* creating hello/assets/webpack.config.js
* creating hello/assets/.babelrc
* creating hello/assets/js/app.js
* creating hello/assets/css/app.scss
* creating hello/assets/js/socket.js
* creating hello/assets/package.json
* creating hello/assets/static/favicon.ico
* creating hello/assets/css/phoenix.css
* creating hello/assets/static/images/phoenix.png
* creating hello/assets/static/robots.txt
Fetch and install dependencies? [Yn]
Nos va pedir que si queremos instalar las dependencias, le decimos que si.
* running mix deps.get
* running mix deps.compile
* running cd assets && npm install && node node_modules/webpack/bin/webpack.js --mode development
We are almost there! The following steps are missing:
$ cd hello
Then configure your database in config/dev.exs and run:
$ mix ecto.create
Start your Phoenix app with:
$ mix phx.server
You can also run your app inside IEx (Interactive Elixir) as:
$ iex -S mix phx.server
Para poder correr la aplicación tenemos que crear una base datos y para ello usamos ecto.
$ mix ecto.create
Compiling 14 files (.ex)
Generated hello app
The database for Hello.Repo has been created
Para poder visualizar e iniciar nuestra aplicación usamos el comando:
$ mix phx.server