Size: a a a

Clojure — русскоговорящее сообщество

2020 May 23

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Не, у меня проблема в другом - как сделать так, чтобы ринг перезапускался при обновлении, иначе, конда обновляю с запущенным рингом, вылазит ошибка, что сокет уже используется
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Да, как раз эту статью и читаю...
источник

AS

Alex Shipilov in Clojure — русскоговорящее сообщество
Мне кажется вы говорите про сервер, а не ринг. Его как правило не нужно перезапускать при разработке, с этим как раз справляется враппер который я скинул выше.
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
да, именно про сервер я и говорю, он у меня сейчас определен как (def server (run-yetty ....)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
может быть его следует в -main засунуть? как его стартоват только один раз?
источник

AS

Alex Shipilov in Clojure — русскоговорящее сообщество
(defn app [req]
 {:status 200
  :body   "ok"})

(def server (run-jetty #'app {:port 8080 :join? true}))

можно еще  использовать #’ , тогда будет ссылка на app и при его изменении не нужно перезапускать сервер, но это такое) лучше разобраться с миидлварой)
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
источник

AS

Alex Shipilov in Clojure — русскоговорящее сообщество
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
пробую....
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Alexey Cheremisin
сейчас просто подключаюсь к nrepl и при изменении каждый раз перезапускаю ring, что не очень удобно, может быть его вынести в отдельный модуль?
типичный воркфлоу — это держать все запущенным в репле, при иметь функу типа reset, которая:

1. стопает (опционально паузит, но это можно опустить) все стейтфул штуки, включая хттп-сервер с ринг хэндлерами
2. релоадит код с помощью tools.namespace
3. стартуает стейтфул штуки заново

собственно это единственный способ без сюрпризов, надежно иметь эффективный воркфлоу разработки. однако, я подозреваю, что тут есть некоторый порог вхождения, преодолевать который потребует определенных усилий. но оно того стоит.

есть попытки делать экосистемы вокруг такого подхода, где более-менее все должно работать из коробки и с решеными общими проблемами типа https://github.com/duct-framework/duct
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
ну и собственно что именно находится в -main вообще ортогонально довольно, -main это точка входа в приложение запускаемое снаружи, никто не мешает иметь для разработки совсем другую точку входа
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Andrew Rudenko
типичный воркфлоу — это держать все запущенным в репле, при иметь функу типа reset, которая:

1. стопает (опционально паузит, но это можно опустить) все стейтфул штуки, включая хттп-сервер с ринг хэндлерами
2. релоадит код с помощью tools.namespace
3. стартуает стейтфул штуки заново

собственно это единственный способ без сюрпризов, надежно иметь эффективный воркфлоу разработки. однако, я подозреваю, что тут есть некоторый порог вхождения, преодолевать который потребует определенных усилий. но оно того стоит.

есть попытки делать экосистемы вокруг такого подхода, где более-менее все должно работать из коробки и с решеными общими проблемами типа https://github.com/duct-framework/duct
Спасибо!
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
разобрался, достаточно просто оказалось
(defn -dev-main
 [port-number]
 (run-jetty
  (wrap-reload #'app)
  {:port  (Integer. port-number)
   :join? false}))
источник

S

Special K in Clojure — русскоговорящее сообщество
Не подскажешь, какой утилитой запись сделана?
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Special K
Не подскажешь, какой утилитой запись сделана?
Если под линукс, то я пишу через vokoscreenNG, там можно еще и окошечко с камерой себя любимым сдеалать
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Special K
Не подскажешь, какой утилитой запись сделана?
Да, оказывается и под винду есть оная - https://linuxecke.volkoh.de/vokoscreen/vokoscreen-download.html
источник

S

Special K in Clojure — русскоговорящее сообщество
Спасибо
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Special K
Спасибо
под OSX делается стандартно из системы, если чего простого - https://support.apple.com/en-us/HT208721
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Alexey Cheremisin
разобрался, достаточно просто оказалось
(defn -dev-main
 [port-number]
 (run-jetty
  (wrap-reload #'app)
  {:port  (Integer. port-number)
   :join? false}))
это будет работать, но далеко не всегда и уж точно никак не поможет при апдейте стейтфул кода
источник

AC

Alexey Cheremisin in Clojure — русскоговорящее сообщество
Andrew Rudenko
это будет работать, но далеко не всегда и уж точно никак не поможет при апдейте стейтфул кода
Да, это понятно. Я потом хочу что нибудь типа integrant подцепить.
источник