Coast - это полная веб -структура стека, написанная в Clojure для небольших команд или сольных разработчиков. Он использует реляционную базу данных и отображает HTML на сервере без JavaScript, который позволяет вам быстрее отправлять ваши веб -приложения.
( 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 })Проверьте следующий филиал для изменений, которые приходят на Coast v1.0
Не стесняйтесь задавать вопросы на канале побережья.
Здесь доступны более полные документы
Если вы не хотите читать документы и просто хотите прыгнуть, вы в правильном месте.
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 myappЭто перенесет вас от установки Fresh Coast в рабочее приложение Todo List.
Первое, что вы делаете, когда начинаете проект Coast? coast new в вашем терминале:
coast new todosЭто сделает новую папку в текущем каталоге под названием «Todos». Пойдем туда и посмотрим, что случилось:
cd todos
tree .Это покажет вам макет проекта по умолчанию побережья:
.
├── 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.cljВведите это в свой терминал в каталоге проекта
make server и посетите http://localhost:1337 чтобы увидеть приветственное побережье на странице по умолчанию Clojure
Это также должно создать базу данных SQLITE с именем базы данных, определенной в db.edn и переменной среды COAST_ENV или :coast-env , определенной в env.edn .
Теперь, когда база данных создана, давайте создадим миграцию:
coast gen migration create-table-todo name:text finished:bool
# db/migrations/20190926190239_create_table_todo.clj created Это создаст файл в db/migrations с помощью метки времени и любого имени, которое вы ему дали, в данном случае: 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 )))Это Clojure, а не SQL, хотя простые миграции SQL будут работать просто отлично. Время применить эту миграцию в базу данных:
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 Это обновляет схему базы данных с помощью таблицы todo . Время перейти к коду Clojure.
Теперь, когда база данных перенесена, именно здесь появляются генераторы Coast. Вместо того, чтобы вам приходилось набирать все вручную и читать документы по ходу дела, генераторы - это способ начать вас, и вы можете настроить то, что вам нужно оттуда.
Это создаст файл в каталоге src с именем таблицы. Coast - довольно скромная веб -структура, нет FRP или График языки запросов или что -нибудь. Есть только файлы с семь функций каждый: build , create , view , edit , change , delete и index .
coast gen code todo
# src/todo.clj created successfullyCoast использует библиотеку под капюшоном под названием Hiccup для генерации HTML.
Одно, что побережье еще не делает, - это обновить файл маршрутов, давайте сделаем это сейчас:
( ns routes
( :require [coast]))
( def routes
( coast/site
( coast/with-layout :components/layout
[ :get " / " :home/index ]
[ :resource :todo ]))) ; add this line Маршруты также представляют собой векторы Clojure, причем каждый элемент маршрута указывает, какой метод HTTP, URL и функция вызовы наряду с необязательным именем маршрута, если вам не нравится имя namespace / function .
[:resource :todo] Устанавливает основные маршруты CRUD в одной строке.
Давайте проверим это с терминала. Запустить это
make server и посетите http://localhost:1337/todos чтобы увидеть приложение в действии.
В настоящее время я использую Atom с Parinfer и Chlorine в качестве клиента Repl, проверьте его, если вы хотите гладкий опыт Clojure.
Первый запуск, сервер Spep Socket:
make replЗатем в вашем редакторе подключитесь к серверу Repl.
Например, в атом с хлором:
Нажмите space + c , заполните порт 5555 и нажмите Enter .
После того, как вы подключитесь, загрузите файл server.clj с помощью Chlorine: Load File .
Наконец, переместите курсор в (-main) и оцените с помощью Cmd+Enter .
Перейдите к http: // localhost: 1337/todos и проверьте свою ручную работу.
Версии Readline могут столкнуться в зависимости от вашей настройки. Возможно, вам потребуется понижать до более низкой версии READLINE в зависимости от вашей версии Clojure. Например ... Readline версия 7.0 для Clojure 1.9
Любой вклад приветствуется! Отправьте PR и давайте объединитесь!
Побережье на Clojure выпускается по лицензии MIT.