featured image

PHP, Rails, Django, Catalyst, ChicagoBoss... Phoenix Framework. Después de muchos framework llegamos a Elixir y encontramos este trabajo impecable de José Valim y Chris McCord, ¿por qué está teniendo tanta fama?

Actualización 26/05/2021: Phoenix Framework se ha convertido en un marco para construir aplicaciones web muy potente. Si quieres saber cómo emplearlo te recomiendo el libro Phoenix Framework: Proyecto de Red Social en 7 días que orienta sobre un proyecto real cómo trabajar con el framework.

En principio tenemos la base de la composición: Erlang/OTP. Sobre esta base y construido por José Valim tenemos a Elixir. Este lenguaje que fue creado pensando en Ruby (su metaprogramación) y las cualidades propias de Erlang/OTP para servir a unas necesidades cada vez más demandadas en el área del desarrollo web: interacción con el usuario o websockets.

Elixir es el lenguaje que permite ese grado de metaprogramación, agregando un poco más de la esencial funcional a la base de Erlang/OTP y construido sobre ellos Phoenix Framework, un entorno diseñado para facilitar el trabajo del desarrollador web.

Primeros Pasos

Una de las cosas que más me impactaron la instalar Phoenix Framework es su sencillez. Tras instalar Erlang y Elixir, solo hay que ejecutar esto en la consola (GNU/Linux o MacOS) y lo tendremos:

mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez

También es conveniente tener instalado node.js para aprovechar el uso de brunch para compilar CSS y JavaScript en un solo fichero.

Si tienes dudas con la instalación puedes obtener más información aquí.

Para crear un proyecto, solo tendemos que ejecutar lo siguiente:

mix phoenix.new mi_proyecto

Esto generará un directorio llamado mi_proyecto con la estructura de directorios necesaria, dependencias y código para comenzar con un entorno funcionando desde el principio.

Base de Datos

Uno de los detalles más llamativos es la elección de base de datos. A diferencia de otros entornos Phoenix Framework ha decidido tener como estándar PostgreSQL. Una decisión que comparto y aplaudo. No obstante, su sistema de acceso a base de datos nos permite otras opciones como MySQL o incluso SQLite.

Mis recomendaciones sobre qué base de datos emplear puedes verlas en este otro artículo.

Para poder arrancar empleando PostgreSQL tendrás que instalar la base de datos y crear un usuario. Sin embargo, si quieres hacer un inicio aún más rápido, puedes cambiar agregar a la creación del proyecto el parámetro --database sqlite:

mix phoenix.new mi_proyecto --database sqlite

Si te decides a emplear PostgreSQL o MySQL, tendrás que revisar los datos de acceso a la base de datos en el fichero: config/dev.exs.

En caso de dar permisos al usuario para crear la base de datos podremos ejecutar mix ecto.create. Igualmente tendremos que usarlo si decidimos usar SQLite.

Ecto es el sistema de acceso a base de datos que facilita las consultas y migraciones de la base de datos.

Iniciando el servidor web

Una vez tengas configurada la base de datos podemos seguir con los siguientes comandos:

mix phoenix.server

Con este comando ejecutamos el servidor web. Comenzará un proceso a escuchar en el puerto 4000 y podrás acceder a través de esta URL a la web de bienvenida por defecto de Phoenix Framework:

http://localhost:4000/

Como curiosidad del modo desarrollo, si modificas el fichero web/templates/page/index.html.eex mientras el comando se está ejecutando y tienes cargada la página web en un navegador, verás que se recarga la página cada vez que almacenas el fichero en disco.

Estructura

El código se distribuye a través de los directorios dejando el código propio de Elixir en lib y deps. Los códigos específicos de Phoenix Framework irán bajo el directorio web donde podemos ver:

  • channels, un nuevo concepto que facilita la creación de sitios web con el uso de websocket para mantener una comunicación directa con el usuario y en tiempo real.
  • controllers, los controladores gestionan las acciones a realizar cuando se recibe una solicitud (y justo después de tratarse la petición mediante router.ex y el pipeline específico).
  • models, nuestro código para acceso a base de datos. A emplear principalmente desde los controladores.
  • router.ex, es el fichero donde escribir las rutas (o URI) para ser gestionadas por los controladores.
  • static, imágenes, código JavaScript, hojas de estilo (CSS), etc. Todos los ficheros estáticos que no serán procesados por el sistema.
  • templates, el código HTML o EEx que permite la mezcla de HTML con etiquetas especiales con código en Elixir.
  • views, el código que permite agregar funcionalidad (helpers) a las plantillas (templates).
  • web.ex, agrega definiciones en general para el proyecto (para las vistas, controladores, etc).

En la raíz podemos ver también el directorio priv que contiene a su vez un directorio repo donde se almacenan los ficheros para las migraciones.

Conclusiones

Tras usar durante unos años ChicagoBoss he sido un poco escéptico a comenzar a usar Phoenix Framework porque, aunque la arquitectura de ChicagoBoss me gusta y considero que tiene mucho potencial, cuando lo usas ves que queda mucho por hacer. Sin embargo Phoenix Framework tiene un acabado impecable y de momento en las webs que hemos realizado no ha surgido ningún problema que nos haya hecho lamentarnos de la decisión de usarlo.

¿Habías oído hablar antes de Phoenix Framework? ¿Te animas a probarlo? ¿Necesitas ayuda para comenzar tu proyecto? ¡Haz un comentario o ponte en contacto con nosotros!