Difference between revisions of "Synthèse"

From air
Jump to navigation Jump to search
Line 216: Line 216:
 
= Bibliographie =
 
= Bibliographie =
   
  +
== Sites internet ==
* https://linuxfr.org/news/elixir-phoenix-et-membrane
+
* [https://linuxfr.org/news/elixir-phoenix-et-membrane '''Elixir, Phoenix et Membrane''', Bruno Michel, 30/07/2018]
* https://www.julienrollin.com/posts/decouverte-du-langage-langage-elixir-et-du-framework-phoenix/ (+++)
 
* https://riptutorial.com/fr/phoenix-framework
+
* [https://riptutorial.com/fr/phoenix-framework '''Démarrer avec phoenix-framework''']
 
* [https://www.julienrollin.com/posts/decouverte-du-langage-langage-elixir-et-du-framework-phoenix/ '''Découverte du langage fonctionnel Elixir et du Framework Phoenix''', Julien Rollin, 06/04/2019]
* https://www.youtube.com/watch?v=1hl_z9-QO9c
 
 
* [https://hackernoon.com/writing-a-blog-engine-in-phoenix-and-elixir-part-4-adding-roles-to-our-controllers-9f4678b48468 '''Writing a Blog Engine in Phoenix and Elixir: Part 4, Adding Roles to our Controllers''', Brandon Richey, 14/10/2015]
* https://www.youtube.com/watch?v=ZUNzXbIP_FQ
 
 
* [http://wsmoak.net/2015/07/12/phoenix-and-ecto-from-mix-new-to-heroku.html '''Phoenix and Ecto: From `mix new` to Heroku''', Wendy Smoak, 12/07/2015]
* https://hexdocs.pm/phoenix/Mix.Tasks.Phx.Gen.Html.html
 
  +
* [https://blog.resellerclub.com/pros-and-cons-of-elixir-programming/ '''Pros and Cons of Elixir Programming''', Maria Redka, 06/08/2019]
* https://www.julienrollin.com/posts/decouverte-du-langage-langage-elixir-et-du-framework-phoenix/
 
  +
* [https://fr.statista.com/statistiques/564832/nombre-d-utilisateurs-actifs-mensuels-de-whatsapp '''Nombre d’utilisateurs actifs mensuels de WhatsApp''', janvier 2019]
* https://hackernoon.com/writing-a-blog-engine-in-phoenix-and-elixir-part-4-adding-roles-to-our-controllers-9f4678b48468
 
  +
* [https://prograils.com/posts/top-websites-built-with-elixir-phoenix '''Top websites built with Elixir and Phoenix''', Cyprian Lakomy, 19/04/2019]
* http://wsmoak.net/2015/07/12/phoenix-and-ecto-from-mix-new-to-heroku.html
 
  +
* [https://prograils.com/posts/why-discord-pinterest-moz-bleacher-report-use-elixir-case-studies '''Why Discord, Pinterest, Moz, Bleacher Reeport use Elixir''', Cyprian Lakomy, 23/11/2018]
  +
* [https://www.pompecki.com/post/phoenix-pubsub/ '''Phoenix PubSub''', 15/07/2018]
  +
* [https://www.agilap.com/decouverte-du-framework-phoenix/ '''Découverte du framework phoenix''', Pierre, 13/05/2019]
  +
* [https://semaphoreci.com/community/tutorials/introduction-to-testing-elixir-applications-with-exunit '''Introduction to Testing Elixir Applications with ExUnit''', Cody Boggs, 26/10/2016]
  +
* [https://blog.carbonfive.com/2016/04/19/elixir-and-phoenix-the-future-of-web-apis-and-apps/ '''Elixir and Phoenix: The future of web APIs and Apps?''', Christian Nelson, 19/04/2016]
  +
  +
== Vidéos ==
  +
* [https://www.youtube.com/watch?v=bk3icU8iIto&fbclid=IwAR304idQx9c6UVUJlUwBq5JzPWaBaFAIK3mxayNc9K6WpNJq1alGpFLgx_o '''Phoenix a Web Framework for the New Web''', José Valim (Goto Conférences), 03/11/2016]
  +
* [https://www.youtube.com/watch?v=1hl_z9-QO9c '''Tutoriel Elixir : Découverte du langage Elixir''', Grafikart.fr, 13/06/2017]
  +
* [https://www.youtube.com/watch?v=ZUNzXbIP_FQ '''A Chat Room in 8 minutes with Phoenix''', Elixir Casts, 13/07/2018]

Revision as of 20:17, 4 January 2020

Elixir

Logo Elixir

Présentation

Elixir est un langage de programmation fonctionnelle et dynamique. Il repose sur la machine virtuelle Erlang (BEAM) et sa syntaxe est inspirée de Ruby, bien qu'il reprenne également quelques fonctionnalités intéressantes de d'autres langages comme Python. Elixir implémente également la philosophie Let It Crash. Il est également possible de mettre à jour du code sans que les connexions existantes soient interrompues.

  • Crée en 2011 par José Valim, qui est un contributeur reconnu de Ruby
  • La première version d'Elixir (1.0) est sortie en 2014
  • Licence Apache

Phoenix

Logo Phoenix

Présentation

Phoenix est le framework de référence pour Elixir. Par le biais de channels, il permet de simplifier l'implémentation d'applications web en temps réel. Grâce à la haute disponibilité d'Elixir et de la machine virtuelle Erlang, environ 2 millions de connexions en simultanée peuvent se faire sur une seule machine. Phoenix est l'équivalent pour Elixir de Ruby on Rails pour Ruby. Afin de comparer les deux, le temps de réponse d'accès à une page qui est en interaction avec une base de données est de l'ordre de millisecondes, tandis que pour Ruby on Rails cela serait de l'ordre de dizaines de millisecondes. Phoenix est basé sur le pattern Modèle Vue Contrôleur (MVC)

  • Première version stable sortie en août 2015
  • Licence MIT

Cas d'utilisation

Elixir est recommandé pour les logiciels dont le trafic est important et qui ont besoin de temps de réponse très bas. L'utilisation de websockets et de channels avec Elixir va permettre de réaliser des communication en temps réel.

Avantages

Grâce au support de la machine virtuelle Erlang (BEAM), Elixir fournit également les services suivants :

  • Une haute disponibilité
  • Des fonctionnalités en temps réel
  • Une résistance aux erreurs
  • Une faible latence (des temps de réponse très bas)
  • Tolérance à la panne : si un processus crash, cela ne fera pas crasher l'ensemble des processus. Une illustration serait pour des appels téléphoniques, un appel qui coupe ne fera pas couper tous les autres appels qui ont lieu en même temps.
  • Rechargement à chaud : la publication de mise à jour se fera après avoir terminé l'utilisation du processus. Ainsi, si un processus est en cours d'utilisation (par exemple un appel passé avec WhatsApp), la mise à jour ne se fera pas pendant cette utilisation mais à la fin (après avoir raccroché).
  • Les commentaires dans le code et la possibilité de spécifier des exemples génèrent de la documentation automatiquement ainsi que des tests unitaires

Installation

Les commandes suivantes sont à lancer dans un Terminal.

Elixir

Vérifier la version d'Elixir installée : elixir --version

Erlang permet de compiler du code Elixir. Vérifier que Erlang a bien été installé en lançant : erl

Sous MacOS

Homebrew

brew update
brew install elixir

MacPorts

sudo port install elixir

Sous Ubuntu / Debian

wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang
sudo apt-get install elixir

Outils fournis par Elixir

  • Iex est une console shell interactive.
  • ExUnit est un framework de test / cadriciel de test qui permet d'écrire et générer des tests concis. Ainsi, les rapports d'erreurs sont compréhensibles et facilement repérables.
  • Mix est un outil pour le build, la création, la compilation, le test et pour gérer les dépendances.

Hex

Hex est un gestionnaire de paquets dont la documentation est générée automatiquement à partir du code. Elle est ainsi toujours à jour.

mix local.hex

Phoenix

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

Node.js

Lien de téléchargement sur le site officiel

Vérifier la version installée : node --version

PostgreSQL

Lien de téléchargement sur le site officiel

Client PostgreSQL (optionnel)

Plusieurs clients PostgreSQL peuvent être trouvés sur le lien suivant.
Celui testé dans le cadre de notre découverte d'Elixir et Phoenix est Postico, disponible sous MacOS, qui fournit une interface graphique permettant de visualiser la base de donnée.

Extensions VSCode

code --install-extension mjmcloug.vscode-elixir
code --install-extension joshjg.vscode-credo
code --install-extension iampeterbanjo.elixirlinter

Génération d'un nouveau projet

Création

La commande phx.new crée un nouveau projet dans le dossier hello-phoenix dont le nom du module principal est helloPhoenix.

mix phx.new hello-phoenix --app helloPhoenix`

Lancement du serveur HTTP (Cowboy)

Page d'accueil Phoenix
mix phx.server

sur le serveur local localhost:4000. Le port 4000 est modifiable dans le fichier config/dev.exs.

La page d'accueil ci-jointe est générée.

Lancement des tests

mix test

Base de données

Avec l'image docker Postgres

Cela permet de stocker les données de l'API.

docker run -d -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres

Initialisation

mix ecto.create

Il est également possible d'utiliser le langage MySQL au lieu de PostgreSQL en ajoutant --database mysql à l'initialisation.

Générer un CRUD

On peut générer automatiquement une entité Utilisateur pour gérer des comptes utilisateurs. Les champs sont personnalisables, la liste de tous les champs est disponible ici.

mix phoenix.gen.html Accounts user users name:string age:integer

Cette commande permet de générer plusieurs fichiers tels qu'un Controller, un Module, une Vue, un Template. La seule action à réaliser est d'ajouter dans le router router.ex le chemin vers la page /user.

 scope "/", helloPhoenix do
    pipe_through :browser

    get "/", PageController, :index
    resources "/user", AccountsController # À ajouter
end

Ne pas oublier de migrer la base de données avec la commande mix ecto.migrate

Quelques erreurs rencontrées lors de l'utilisation de Phoenix et leurs solutions

Commande Erreur Solution

mix excto.create

FATAL 3D000: database "postgres" does not exist. The database couldn't be created, database "postgres" does not exist

createdb postgres

mix ecto.migrate

ERROR 42P07 (duplicate_table): relation "table" already exists

Depuis Postico, supprimer la base de donnée en question

Documentation officielle

Bibliographie

Sites internet

Vidéos