Coast é uma estrutura da Web Stack completa escrita em Clojure para pequenas equipes ou desenvolvedores solo. Ele usa um banco de dados relacional e renderiza o HTML no servidor sem JavaScript, que permite enviar seus aplicativos da Web mais rapidamente.
( 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 })Confira a próxima filial para as mudanças que vêm para a costa v1.0
Sinta -se à vontade para fazer perguntas no canal Gitter Coast.
Docos mais abrangentes estão disponíveis aqui
Se você não quiser ler os documentos e só quer entrar, está no lugar certo.
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 myappIsso o levará de uma nova instalação da costa a um aplicativo de lista de tarefas que trabalha.
A primeira coisa que você faz quando inicia um projeto da costa? coast new em seu terminal:
coast new todosIsso fará uma nova pasta no diretório atual chamado "Todos". Vamos entrar lá e ver o que está acontecendo:
cd todos
tree .Isso mostrará o layout de um projeto de costa padrão:
.
├── 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.cljDigite isso no seu terminal no diretório do seu projeto
make server e visite http://localhost:1337 para ver a página padrão da costa da Clojure
Isso também deve criar um banco de dados SQLite com o nome do banco de dados definido em db.edn e a variável COAST_ENV ou :coast-env definida em env.edn .
Agora que o banco de dados é criado, vamos gerar uma migração:
coast gen migration create-table-todo name:text finished:bool
# db/migrations/20190926190239_create_table_todo.clj created Isso criará um arquivo em db/migrations com um registro de data e hora e qualquer nome que você deu, neste 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 )))Isso é clojure, não o SQL, embora as migrações simples do SQL funcionem muito bem. Hora de aplicar essa migração ao banco de dados:
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 Isso atualiza o esquema do banco de dados com uma tabela todo . Hora de passar para o código Clojure.
Agora que o banco de dados foi migrado, é aí que entra os geradores de Coast. Em vez de você ter que digitar tudo à mão e ler os documentos à medida que avança, os geradores são uma maneira de começar e você pode personalizar o que precisa a partir daí.
Isso criará um arquivo no diretório src com o nome de uma tabela. Coast é uma estrutura muito humilde da web, não há FRP ou Idiomas de consulta de gráfico ou qualquer coisa. Existem apenas arquivos com sete funções cada: build , create , view , edit , change , delete e index .
coast gen code todo
# src/todo.clj created successfullyCoast usa uma biblioteca sob o capô chamada Soluço para gerar HTML.
Uma coisa que Coast ainda não faz é atualizar o arquivo de rotas, vamos fazer isso agora:
( ns routes
( :require [coast]))
( def routes
( coast/site
( coast/with-layout :components/layout
[ :get " / " :home/index ]
[ :resource :todo ]))) ; add this line As rotas também são vetores de clojure, com cada elemento da rota indicando qual método HTTP, URL e função para chamar, juntamente com um nome de rota opcional, se você não gostar do nome namespace / function .
[:resource :todo] configura rotas básicas de CRUD em uma linha.
Vamos verificar no terminal. Execute isso
make server e visite http://localhost:1337/todos para ver o aplicativo em ação.
Atualmente, uso Atom com Parinfer e Cloro como meu cliente Repl, confira se você deseja uma experiência suave de clojure.
Primeira execução, o servidor de soquete Repl:
make replEm seguida, no seu editor, conecte -se ao servidor Repl.
Em átomo com cloro, por exemplo:
Pressione space + c , preencha a porta com 5555 e pressione Enter .
Depois de conectado, carregue o arquivo server.clj com Chlorine: Load File .
Por fim, mova seu cursor para (-main) e avalie com Cmd+Enter .
Navegue para http: // localhost: 1337/Todos e confira sua obra.
As versões readline podem entrar em conflito, dependendo da sua configuração. Pode ser necessário fazer o downgrade para uma versão inferior do ReadLine, dependendo da sua versão do Clojure. Por exemplo ... ReadLine Versão 7.0 para Clojure 1.9
Qualquer contribuição é bem -vinda! Envie um PR e vamos ingerir!
O Coast on Clojure é liberado sob a licença do MIT.