Coast es un marco web de pila completa escrito en Clojure para equipos pequeños o desarrolladores en solitario. Utiliza una base de datos relacional y representa HTML en el servidor sin JavaScript, lo que le permite enviar sus aplicaciones web más rápido.
( 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 })Echa un vistazo a la próxima rama para los cambios que llegan a Coast V1.0
No dude en hacer preguntas en el canal de la costa de Gitter.
Documentos más completos están disponibles aquí
Si no quieres leer los documentos y solo quieres saltar, estás en el lugar correcto.
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 myappEsto lo llevará de una instalación de Fresh Coast a una aplicación de Lista de TODO en funcionamiento.
¿Lo primero que haces cuando comienzas un proyecto de costa? coast new en tu terminal:
coast new todosEsto hará una nueva carpeta en el directorio actual llamado "TODOS". Entremos allí y veamos qué pasa:
cd todos
tree .Esto le mostrará el diseño de un proyecto de costa predeterminado:
.
├── 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.cljEscriba esto en su terminal en su directorio de proyecto
make server y visite http://localhost:1337 para ver la costa acogedora en la página predeterminada de Clojure
Esto también debería crear una base de datos SQLite con el nombre de la base de datos definida en db.edn y COAST_ENV o :coast-env definida en env.edn .
Ahora que se crea la base de datos, generemos una migración:
coast gen migration create-table-todo name:text finished:bool
# db/migrations/20190926190239_create_table_todo.clj created Esto creará un archivo en db/migrations con una marca de tiempo y cualquier nombre que le haya dado, en este caso: 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 )))Este es Clojure, no SQL, aunque las migraciones SQL simples funcionarían bien. Es hora de aplicar esta migración a la base de datos:
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 Esto actualiza el esquema de la base de datos con una tabla todo . Es hora de pasar al código Clojure.
Ahora que la base de datos ha sido migrada, aquí es donde entran los generadores de Coast. En lugar de tener que escribir todo a mano y leer documentos a medida que avanza, los generadores son una forma de comenzar y puede personalizar lo que necesita desde allí.
Esto creará un archivo en el directorio src con el nombre de una tabla. Coast es un marco web bastante humilde, no hay FRP o Idiomas de consultas gráficas o cualquier cosa. Solo hay archivos con siete funciones cada una: build , create , view , edit , change , delete e index .
coast gen code todo
# src/todo.clj created successfullyCoast usa una biblioteca debajo del capó llamada hiccup para generar HTML.
Una cosa que Coast aún no hace es actualizar el archivo de rutas, hagamos eso ahora:
( ns routes
( :require [coast]))
( def routes
( coast/site
( coast/with-layout :components/layout
[ :get " / " :home/index ]
[ :resource :todo ]))) ; add this line Las rutas también son vectores Clojure, con cada elemento de la ruta que indica qué método HTTP, URL y función llamar, junto con un nombre de ruta opcional si no le gusta el namespace / nombre function .
[:resource :todo] Establece rutas CRUD básicas en una línea.
Vamos a verlo desde la terminal. Ejecutar esto
make server y visite http://localhost:1337/todos para ver la aplicación en acción.
Actualmente uso Atom con parinfer y cloro como mi cliente de replica, échale un vistazo si quieres una experiencia suave de Clojure.
Primer ejecución, el servidor de socket replic:
make replLuego, en su editor, conéctese al servidor Repl.
En átomo con cloro, por ejemplo:
Presione space + c , complete el puerto con 5555 y presione Enter .
Una vez que esté conectado, cargue el archivo server.clj con Chlorine: Load File .
Finalmente, mueva su cursor a (-main) y evalúe con Cmd+Enter .
Navegue a http: // localhost: 1337/Todos y consulte su trabajo manual.
Las versiones de Readline pueden chocar según su configuración. Es posible que deba degradar a una versión inferior de Readline dependiendo de su versión de Clojure. Por ejemplo ... Readline versión 7.0 para Clojure 1.9
¡Cualquier contribución es bienvenida! ¡Envíe un PR y vamos a fusionarlo!
Coast on Clojure se libera bajo la licencia MIT.