Coast est un cadre Web complet écrit en Clojure pour les petites équipes ou les développeurs en solo. Il utilise une base de données relationnelle et rend HTML sur le serveur sans JavaScript qui vous permet d'expédier vos applications Web plus rapidement.
( ns server
( :require [coast]))
( def routes [[ :get " / " ::home ]])
( defn home [request]
" You're coasting on clojure! " )
( def app ( coast/app { :routes routes}))
( coast/server app { :port 1337 })Découvrez la succursale suivante pour les changements à venir sur Coast v1.0
N'hésitez pas à poser des questions sur le canal Gitter Coast.
Des documents plus complets sont disponibles ici
Si vous ne voulez pas lire les documents et que vous voulez juste sauter, vous êtes au bon endroit.
brew install clojurecurl -o /usr/local/bin/coast https://raw.githubusercontent.com/coast-framework/coast/master/coast && chmod a+x /usr/local/bin/coastcoast new myapp && cd myappcurl -O https://download.clojure.org/install/linux-install-1.9.0.391.sh
chmod +x linux-install-1.9.0.391.sh
sudo ./linux-install-1.9.0.391.shsudo curl -o /usr/local/bin/coast https://raw.githubusercontent.com/coast-framework/coast/master/coast && sudo chmod a+x /usr/local/bin/coastcoast new myapp && cd myappCela vous emmènera d'une installation de la côte fraîche à une application de liste de travail de travail.
La première chose que vous faites lorsque vous commencez un projet côtier? coast new dans votre terminal:
coast new todosCela fera un nouveau dossier dans le répertoire actuel nommé "Todos". Entrons là-bas et voyons ce qui se passe:
cd todos
tree .Cela vous montrera la disposition d'un projet Coast par défaut:
.
├── Makefile
├── README.md
├── bin
│ └── repl.clj
├── db
│ ├── db.edn
│ └── associations.clj
├── deps.edn
├── env.edn
├── resources
│ ├── assets.edn
│ └── public
│ ├── css
│ │ ├── app.css
│ │ └── tachyons.min.css
│ └── js
│ ├── app.js
│ └── jquery.min.js
├── src
│ ├── components.clj
│ ├── home.clj
│ ├── routes.clj
│ └── server.clj
└── test
└── server_test.cljTapez ceci dans votre terminal dans votre répertoire de projet
make server et visitez http://localhost:1337 pour voir la page par défaut de la côte accueillante sur Clojure
Cela devrait également créer une base de données SQLite avec le nom de la base de données définie dans db.edn et la variable d'environnement COAST_ENV ou :coast-env définie dans env.edn .
Maintenant que la base de données est créée, générons une migration:
coast gen migration create-table-todo name:text finished:bool
# db/migrations/20190926190239_create_table_todo.clj created Cela créera un fichier en db/migrations avec un horodatage et le nom que vous lui avez donné, dans ce cas: create_table_todo
( ns migrations.20190926190239-create-table-todo
( :require [coast.db.migrations :refer :all ]))
( defn change []
( create-table :todo
( text :name )
( bool :finished )
( timestamps )))C'est Clojure, pas SQL, bien que les migrations SQL simples fonctionneraient très bien. Il est temps d'appliquer cette migration vers la base de données:
make db/migrate
# clj -m coast.migrations migrate
#
# -- Migrating: 20190310121319_create_table_todo ---------------------
#
# create table todo ( id integer primary key, name text, finished boolean, updated_at timestamp, created_at timestamp not null default current_timestamp )
#
# -- 20190310121319_create_table_todo ---------------------
#
# 20190310121319_create_table_todo migrated successfully Cela met à jour le schéma de base de données avec une table todo . Il est temps de passer au code Clojure.
Maintenant que la base de données a été migrée, c'est là que les générateurs de Coast entrent. Plutôt que vous devez tout taper à la main et lire les documents au fur et à mesure, les générateurs sont un moyen de vous démarquer et vous pouvez personnaliser ce dont vous avez besoin à partir de là.
Cela créera un fichier dans le répertoire src avec le nom d'une table. La côte est un cadre Web assez humble, il n'y a pas de FRP ou Graphiques des langues de requête ou quoi que ce soit. Il n'y a que des fichiers avec sept fonctions chacun: build , create , view , edit , change , delete et index .
coast gen code todo
# src/todo.clj created successfullyCoast utilise une bibliothèque sous le capot appelé Hiccup pour générer du HTML.
Une chose que Coast ne fait pas encore est de mettre à jour le fichier des routes, faisons cela maintenant:
( ns routes
( :require [coast]))
( def routes
( coast/site
( coast/with-layout :components/layout
[ :get " / " :home/index ]
[ :resource :todo ]))) ; add this line Les itinéraires sont également des vecteurs Clojure, chaque élément de l'itinéraire indiquant quelle méthode HTTP, URL et fonction à appeler, ainsi qu'un nom de route facultatif si vous n'aimez pas l' namespace / nom function .
[:resource :todo] configure les routes CRUD de base en une seule ligne.
Vérifions le terminal. Courir ceci
make server et visitez http://localhost:1337/todos pour voir l'application en action.
J'utilise actuellement Atom avec Parinfer et Chlore comme client de REP, vérifiez-le si vous voulez une expérience de Clojure lisse.
First d'exécution, le serveur de socket de remplacement:
make replEnsuite, dans votre éditeur, connectez-vous au serveur REP.
En atome avec le chlore par exemple:
Appuyez sur space + c , remplissez le port avec 5555 et appuyez sur Enter .
Une fois que vous êtes connecté, chargez le fichier server.clj avec Chlorine: Load File .
Enfin, déplacez votre curseur vers (-main) et évaluez avec Cmd+Enter .
Accédez à http: // localhost: 1337 / todos et consultez votre travail.
Les versions de lecture peuvent s'affronter en fonction de votre configuration. Vous devrez peut-être rétrograder vers une version inférieure de Readline en fonction de votre version de Clojure. Par exemple ... Readline version 7.0 pour Clojure 1.9
Toute contribution est la bienvenue! Soumettez un PR et faisons-le fusionner!
Coast on Clojure est libéré sous la licence du MIT.