@proelixir

Страница 953 из 1045
Sergey
13.05.2018
20:12:49
а почему странный?

Артем
13.05.2018
20:13:29
Странно такое в плаге делать

Sergey
13.05.2018
20:15:20
хм... казалось, что plug — это функция, которая вызывается при обработке http-запроса. Что странного в том, что я в ней делаю запрос, после того, как ответил на обрабатываемся http запрос?

Артем
13.05.2018
20:20:42
Похоже, твой запрос httpoison ничего не возвращаеь пользователю. Проще всего думать о плаге как о контроллере в mvc в рамках твоей задачи. Пихать лишнее в контроллеры не клево, значит, запрлс нужно унести из плага вовсе.

Google
Артем
13.05.2018
20:22:39
Ну а о send_resp можно дцмать как о render

Sergey
13.05.2018
20:22:55
У меня нет modal и view в рамках моей задачи, у меня внутренний сервис с 2мя точками входа, где плаг просто как обработчик запроса. Спасибо за ответ, но мне скорее интересен вопрос, почему после send_resp процесс отмирает.

Артем
13.05.2018
20:33:32
Так посмотри в код. Наверняка ответ сразу уезжает в ковбой и обработка прекращается

Dmitry
13.05.2018
20:34:03
вот я тоже думаю что там просто не дает вернуться вызову

Никита
13.05.2018
20:34:05
ну я насколько понимаю - сенд респ делает halt(сonn) т.е соединение больше не существует.

после того как послал ответ процесс завершается

Sergey
13.05.2018
20:35:40
Да, вы правы, спасибо. Заведу ген сервер отдельный для пост обработки.

Артем
13.05.2018
20:36:29
Ген сервер для такого оверхэд. Достаточно стартовать таск

Никита
13.05.2018
20:37:12
ну и сделать это до того, как отправил ответ)

Артем
13.05.2018
20:38:03
Ну и не забываем, что генсервер один, а запросов может быть много

Azat
13.05.2018
20:38:55
Посоны, бывало ли у вас такое что в юнит-тестах ген-сервер обслуживающий редис иногда падает от очистки его баз данных?

Google
Zwei
13.05.2018
20:42:53
Ты же ещё не ответил на запрос пока твоя функция не отработала до конца

Никита
13.05.2018
20:44:19
Да ну разобрались же вроде. Процесс с соединением живет ради того, чтобы отправить клиенту ответ. После того как он отправил ответ - процесс умирает. Следовательно все что будет в коде после ответа - просто не выполнится.

А юзать таск - тоже тема двоякая. Если сделать Task.acync - потом отправить ответ. То негде будет делать Task.await.

Zwei
13.05.2018
20:45:18
Ну send_resp же не выплёвывает ответ сразу же в момент вызова, он просто модифицирует твой %Plug.Conn{}, который ты потом из этого колбэка возвращаешь

Артем
13.05.2018
20:45:20
Таск, который в модуле Task, да?
Для вызова 1 метода проще всего spawn

Никита
13.05.2018
20:45:24
проще просто spawn новый процесс запустить

хм. а я думал выплевывает) и вот товарищ с проблемой доказал - что выплевывает))

Sergey
13.05.2018
20:47:06
Окей, спасибо, господа!

Никита
13.05.2018
20:47:54
судя потому, что ты после сенд_респ пытаешься что-то сделать - тебе результат клиенту отправлять не нужно. Так что просто перед сенд_респ через spawn в отдельном процессе запусти нужную тебе функцию и все

Артем
13.05.2018
20:48:49
хм. а я думал выплевывает) и вот товарищ с проблемой доказал - что выплевывает))
Ну типа да. Есть сенд-респ - пайплайна не будет - зачем идти дальше

Zwei
13.05.2018
20:54:46
send_resp принимает conn и возвращает conn, который потом ты опять же из call возвращаешь

прерывать выполнение в момент вызова уже какой-то процедурный стаф

Alex
13.05.2018
21:36:16
Да, вы правы, спасибо. Заведу ген сервер отдельный для пост обработки.
не, не стоит. тебе вообще нужны результаты запроса?

spawn, как тут советуют - это полная шляпа, процесс который висит в воздухе и никем не контролируется.

я вообще не уверен, что ты получишь в логи запись о падении процесса, который создан через просто spawn.

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

Egor
14.05.2018
03:44:49
spawn, как тут советуют - это полная шляпа, процесс который висит в воздухе и никем не контролируется.
Всм, чтобы отправить запрос один раз spawn - это самая лучшая вещь, что-то вроде корутины. Упадёт - штош, не судьба, не упадёт - значит, отправилось. Ну, а логирование - это отдельный разговор

Google
Артем
14.05.2018
04:04:55
И в монитор ошибок тоже

И для пинанмя внешней системы когда тебе не нужен ответ этого достаточно

Максим
14.05.2018
09:17:32
Всем привет. Подскажите как победить диалайзер. Есть вызов HTTPoison.get(url, "X-Redmine-API-Key": "#{Parent.getKey()}"). На что диалайзер ыводит ошибку: The call 'Elixir.HTTPoison':get(Vurl@1::<<_:8,_:_*1>>,[{'X-Redmine-API-Key',bitstring()},...]) will never return since it differs in the 2nd argument from the success typing arguments: (binary(),[{binary(),binary()}] | #{binary()=>binary()})

Хотя вызов взят с доки на гитхабе

Артем
14.05.2018
09:24:48
[{binary(),binary()}]

наверно указать аргумент так?

не помогает?

Максим
14.05.2018
09:26:31
помогает

хотя в доке



Alexey
14.05.2018
11:51:29
Кстати пока все зубоскалили над кексом, он расширился, а вы все так же вкалываете за копейки! https://www.youtube.com/watch?v=EFFiWDCFMLM
ничоси у них там строительный минимализм. лестницы из профиля сварены. перекрытия залиты бетоном по профлисту. листы ОСБ, как декор стенок... или это, хм, обои под ОСБ?

Alexey
14.05.2018
11:52:39
я восхищен

Evgeny
14.05.2018
11:52:56
Белая зависть, значит.

Alexey
14.05.2018
11:55:22
Белая зависть, значит.
они исполнили мою мечту - каркасный дом из металла )

Evgeny
14.05.2018
11:56:32
странные у вас мечты, товарищ.

Alexey
14.05.2018
12:03:17
не ну а чо. тут же все, как я понял, программируют. личной жизни нет ни у кого )

Evgeny
14.05.2018
12:09:01
Ну почему же. У меня есть кот, компьютер и жена.

А еще два сына, дочь и собака.

Google
Taras ?
14.05.2018
12:09:43
интересная последовательность))

Evgeny
14.05.2018
12:09:58
Но ты прав, никакой личной жизни. Даже в XCOM 2 некогда поиграть.

Taras ?
14.05.2018
12:10:09
кот, компютер и жена ? по убыванию важности чтоль?))

кот в самом начале и собака под конец ? )))

Evgeny
14.05.2018
12:26:23
собака под конец, потому что пытается обидеть моего любимого кота.

Никита
14.05.2018
12:50:31
у мну 9 котов и 4 собаки)

Максим
14.05.2018
13:38:39
а подскажите, в эликсире можно сваять конструкцию типа: b = "trim" a= "String.#{b}" a("ddd") т.е динамически собрать имя функции? String."trim"("aa") работает. А как это через переменную соорудить?

Nick
14.05.2018
13:39:34
через apply можно

Alik
14.05.2018
13:40:20
https://hexdocs.pm/elixir/Kernel.html#apply/3

Marsel
14.05.2018
13:40:24
iex(1)> a = fn(b) -> "String.#{b}" end #Function<6.99386804/1 in :erl_eval.expr/5> iex(2)> a.("ddd") "String.ddd" iex(3)> такое?

Alik
14.05.2018
13:40:26
но не с анонимной функцией

Marsel
14.05.2018
13:40:47
а, не

Alik
14.05.2018
13:41:04
apply String, "ddd", []

Marsel
14.05.2018
13:41:06
поспешил)

Alik
14.05.2018
13:41:37
apply String, "ddd", []
возможно второй параметр придётся пробразовать в атом, а может и так сработает, не уверен

Egor
14.05.2018
13:42:15
Скорее всего нет, потому что эликсир умеет сам из строк атомы делать

Никита
14.05.2018
13:42:35
мож просто сделать не функции с разными именами, а одну функцию с матчингом на первый параметр, например

Evgeny
14.05.2018
14:06:44
b = "trim" a = fn x -> apply(String, :"#{b}", [x]) end a.("text ")

Для гурманов-извращенцев b = "trim" defmodule Foo do defmacro a(x) do String.unquote(:"#{b}")(x) end end require Foo Foo.a("text ")

Google
Dmitry
14.05.2018
14:29:40
Первый вариант лучше, но сама идея трансформировать user input строки в атомы не самая хорошая идея.

Alex
14.05.2018
14:36:06
b = "trim" a = fn x -> apply(String, :"#{b}", [x]) end a.("text ")
вот насчет этого тоже сомневаюсь, надо проверять

мне почему-то кажется, что :"#{x}" это compile time преобразование

Evgeny
14.05.2018
14:39:29
мне кажется, что тебе кажется :)

Alex
14.05.2018
14:39:53
да, мне и вправду кажется

Evgeny
14.05.2018
14:41:31
но в данном случае очевидно, что значение b будет закложурено в лямбду a

но иначе никак

РКП заблочил glot.io вот жеж пидорки

Dmitriy
14.05.2018
14:44:31
Привет. А как сделать broadcast из одного канала в другой? Например, у меня есть канал Messages. Есть обработчик входящего события handle_in "new_msg". Мне нужно внутри этого обработчика отправить исходящее сообщение в другой канал Notifications.

phoenix, "~> 1.3.0"

Alex
14.05.2018
14:48:27
но в данном случае очевидно, что значение b будет закложурено в лямбду a
да дело не в этом. мне интересно стало, когда :"..." выполняется в рантайме, а когда в компайл-тайме

Evgeny
14.05.2018
14:49:13
это однозначно рантайм

Страница 953 из 1045