Anonymous
https://www.scaleway.com/ кто пробовал?
Там Intel Avoton вместо процессора
Anonymous
т.е. нафиг :)
Wingman
и харды, подключаемые по сети
Wingman
и с нетворком постоянные траблы
Wingman
ща найду скрины летние мб )
Anonymous
https://www.scaleway.com/ кто пробовал?
Бери лучше арубу или DO, вполне норм :))
Максим
да хз, смотря под что смотреть, у меня там пара тестовых сервачков, для тестов за такие деньги - сойдет
Wingman
Wingman
ггг
Евгений
спс
heavycharged
https://www.scaleway.com/ кто пробовал?
пробовал, смотря что тебе
heavycharged
там же есть дедики, есть VPS
Евгений
минимальный хвостинг для экспериментов
heavycharged
как минимальный - вполне себе пойдет. я брал VPS который за 3 евро что-ли. не арм который.
heavycharged
но производительность там конечно не ахти, именно что для тестов или для экономии)
Илья
а дайте плз чёнить почитать про бестпрактис по миграциям, схемам, орм в гошке?
орм, как по мне не нужны, можно модельки + squerel + sqlx если хочется сахара - достаточно чтобы сделать модели + реозиторий, с миграциями всё довольно плохо есть https://github.com/mattes/migrate, но мне лично он не понравился, есть https://github.com/db-journey/migrate, я в итогу остановился на github.com/DavidHuie/gomigrate
Anonymous
для всяких тестов обычно хватает арубы за один евро %)
heavycharged
господа, а как писать долгоиграющий веб-сервер, и как его защитить на случай паники? ну т.е., если идет паника, в каком мне месте лучше делать recover{}?
heavycharged
точнее даже не веб-сервер писать, а веб-приложение на базе net/http
heavycharged
и собственно, в самом recover{} что делать, пишем в лог и стартуем http сервер заново?
Alexei
а лучше писать так, чтобы не писать recover, увы в команде - это недостжимо )
Илья
и собственно, в самом recover{} что делать, пишем в лог и стартуем http сервер заново?
middleware с recover внутри, писать в лог, рестартовать ничего не надо
heavycharged
middleware с recover внутри, писать в лог, рестартовать ничего не надо
т.е. если паника на этапе middleware, то сервер не падает?
Alexander
recover не для всего сервера, а только для обработчика запроса. Тогда просто будет ответ error 500, а сервер жив и работает
Wingman
для всяких тестов обычно хватает арубы за один евро %)
Для тестов мб; для прода я пробовал брать за 15$, при трафике от 5 мб/с начинается адовый джиттер и лаги (
Илья
т.е. если паника на этапе middleware, то сервер не падает?
https://www.nicolasmerouze.com/middlewares-golang-best-practices-examples/
heavycharged
ну вот допустим, знаю что в Go есть баг, когда клиент делает запрос серверу, а сервер отвечает не 200 OK а просто 200, то чуть ниже идет разбиение строки по пробелу, и потом обращение к [1] элементу, но так как ответ пришел 200, то разбив строку мы получаем только [0] элемент в слайсе, а первого нету. и там нету проверки на len, что приводит к панике. К чему я говорю, собственно. К тому, что если есть recover в middleware, а паника началась в самом HTTP, то в таком случае recover уже не сработает, я правильно понимаю?
Илья
а я goose'я чутка модернизировал.и гоняю его для миграций )
он неплох, да, я просто не придумал как ег овстроить в текущий проект для DI и сдался, хотя .go миграции - это круто!
heavycharged
не понял в чем баг
сейчас постараюсь найти
Anonymous
Anonymous
Опять к нам с этой уродской программой
heavycharged
не понял в чем баг
C:/Go/src/net/http/transport.go:1125
heavycharged
if resp.StatusCode != 200 { f := strings.SplitN(resp.Status, " ", 2) conn.Close() return nil, errors.New(f[1]) }
Anonymous
Опять к нам с этой уродской программой
Похоже по однодневной компании ее реализовали, сейчас концов похоже не найдешь
heavycharged
сначала бьем строку по пробелу, ожидаемый ответ сервера допустим "404 Not Found", но если сервер ответил "404" то появляется паника. в контексте сервера этот баг не актуален, но кто знает какие ещё бывают паники в самом ядре net.http, я поэтому и спрашиваю, спасет ли от такой паники recover в middleware, и мне почему-то кажется что нет
Kirill
Wut
Aleksey
https://www.scaleway.com/ кто пробовал?
У меня там сервачок. По началу был большой процент столенсипию, под 5 процентов скакало, сейчас всегда меньше еденицы. Ну и то что в серых адресах за натом, в этом есть и плюсы и минусы. Ещё один минус что коннект на 25 порт только по большой просьбе наружу открывают.
Anonymous
Wut
Много выше уже объяснял что это такое...
Kirill
Я догадываюсь, что это такое 😄
Anonymous
Всю область заставляют в ней работать
Kirill
Anonymous
Да фиг бы ней., но необходимо по сети работать, а она не может ):
Kirill
А я всё думаю, как достать из экселя с макросами логику обработки данных и переписать на гошку
Kirill
Пока адекватного ничего не придумал
Anonymous
Еще вам инсайд открою... Все мед учреждения нашей области заставили с этого года перейти работать на программу Парус., все запросы из нее тупо в открытом виде передаются.
Anonymous
Послушал снифером на шлюзе
heavycharged
а почему сервер ответит 404? куда делось описание статуса?
я понятия не имею, но в целом, все равно не правильно надеятся на то, что пришло извне.
Aleksandr
я понятия не имею, но в целом, все равно не правильно надеятся на то, что пришло извне.
ну это бага на стороне сервера. го вполне может надеяться на то, что пришло извне в данном случае. спека же
Aleksandr
6.1 Status-Line The first line of a Response message is the Status-Line, consisting of the protocol version followed by a numeric status code and its associated textual phrase, with each element separated by SP characters. No CR or LF is allowed except in the final CRLF sequence. Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Aleksandr
вот так написано. что reason phrase опционален не написано
Kirill
А я всё думаю, как достать из экселя с макросами логику обработки данных и переписать на гошку
Кстати, есть у кого мысли на этот счёт? Кода там очень много, часть логики на экселевых формулах
Aleksandr
распаковывать, читать формулы в xml, много думать
Slach
;) Народ, а кто gometalinter в проектах использует?? есть такой код list := NewList().AddButton("Button", "postback", "Button Content") list.AddElement(listElement) прилетело вот такое components_test.go:43:⚠️ internal error: no range for "list" (vetshadow) что конкретно за ошибка я не понимаю
heavycharged
так причем тут враппер?
какой враппер? middleware?
Aleksandr
какой враппер? middleware?
ну ты выше хотел wrapper какой-то писать
Aleksandr
сервера почему-то. а бага клиентская.
Илья
какой враппер? middleware?
да, если ошибка на уровне библиотеки ne/http то нет, мидлвар не поможет, сервер упадёт, и за его подъем должен отвечать systemd или кто там у вас за это отвечает, на уровне приложения я бы такое не ловил
heavycharged
Нет, я вам просто привел пример баги, которая возникает в самом HTTP на стороне клиента. Т.е., нет никаких гарантий, что если клиент пришлет запрос не по стандарту серверу, то опять не вылезет какая-то паника. И хочу обезопасить себя от таких случаев, когда кто-то запросит мой сервер не по стандарту.
Aleksandr
эм..
мне так же кажется. в логах периодически вижу паники, а приложение работает
hypnopumpia
Я о том, что описано тут: https://github.com/golang/go/issues/16542 Сейчас, если в одном из хендлеров происходит panic, она автоматически рековериться, а не поднимается на самый верх.
Илья
хммм, ого, не знал про это, тогда паники не будет даже если будет проблема при чтении request // Serve a new connection. func (c *conn) serve(ctx context.Context) { c.remoteAddr = c.rwc.RemoteAddr().String() ctx = context.WithValue(ctx, LocalAddrContextKey, c.rwc.LocalAddr()) defer func() { if err := recover(); err != nil && err != ErrAbortHandler { const size = 64 << 10 buf := make([]byte, size) buf = buf[:runtime.Stack(buf, false)] c.server.logf("http: panic serving %v: %v\n%s", c.remoteAddr, err, buf) } if !c.hijacked() { c.close() c.setState(c.rwc, StateClosed) } }()
Илья
https://golang.org/src/net/http/server.go
heavycharged
проверил, действительно идет recover.. т.е. middleware тут по сути нужен даже для того, чтобы просто красиво отрисовать страницу и записать в лог/сделать ещё что-то, и даже без него паника где-то в хендлере не убьет сервер.
heavycharged
спасибо за инфу
Илья
зе мор ю ноу
heavycharged
что-то я упустил этот момент, и всю жизнь думал что сервер валится если где-то я накосячу. главное теперь не начать меньше проверок писать))