
Николай
13.09.2018
07:49:28
Здравствуйте. Прошу вашей помощи, возникла проблема с использованием Ecto. Я создаю запись через Repo.insert, получаю {:ok, client}. И отправляю во внешнюю систему client.id (sidekiq на ruby) таск на выполнение импорта. Таск крешится с сообщением, что клиента с указанным id не найдено. Оказалось, что insert возвращает результат до выполнения коммита транзакции. Возникает вопрос, можно ли как-то ожидать завершение коммита до получения результата?
Пробовал обернуть insert в transaction, таже история.

Dmitry
13.09.2018
07:51:41
Т.е. через sidekiq кишку и руби срабатывает быстрее чем коммит?
Как то звучит невероятно

Николай
13.09.2018
07:53:00

Google

Dmitry
13.09.2018
07:53:48
Лог в студию
Экто вообще не пишет в лог commit не простые запросы
А только на транзакции
Значит ты посылаешт в сайдкик раньше конца транзакции

Николай
13.09.2018
08:06:30
Хм, хорошо, спасибо, покурю, поищу, может где-то оборачивается в транзакцию поверх эта история.. Не подумал об этом
но ведь insert все равно возвращает результат раньше коммита. В большинстве случаев она завершится быстрее, чем таск дойдет до sidekiq, это да. а если база "подтупит" на пару лишних сотых долей секунды, возникнет та же проблема. В целом, нет возможности ожидать результат завершения транзакции, через Ecto?

Dmitry
13.09.2018
08:07:45
У insert нету коммита
Чтобы был коммит, должен быть begin
id же из базы берется - автогенерируется
Значит запись там уже есть

Николай
13.09.2018
08:11:06
Стоп, стоп, стоп. Запись и её ID есть в текущей транзакции. Insert - это тоже транзакция в БД, и она тоже подразумевает begin и commit

Dmitry
13.09.2018
08:11:39
С чего бы?
Repo.insert просто делает запрос, без всяких транзакций
Для транзакции должны быть причины

Google

Dmitry
13.09.2018
08:12:47
Например тесты оборачивают все в транзакцию и потом роллбэчат чтобы база была одинаковая после всех тестов
Или ты сам написал в коде Repo.transaction

Николай
13.09.2018
08:14:16
https://www.tutorialspoint.com/sql/sql-transactions.htm
A transaction is the propagation of one or more changes to the database. For example, if you are creating a record or updating a record or deleting a record from the table, then you are performing a transaction on that table. It is important to control these transactions to ensure the data integrity and to handle database errors.

Nikolai
13.09.2018
08:17:15
судя по коду инсерта, транзакция там может быть, если вставляются эмбеды или ассоциации.

Dmitry
13.09.2018
08:18:06
Но все равно экто выполняет строчку синхронно
По идее
Во всяком случае странно было бы предположить другое

Nikolai
13.09.2018
08:18:30
угу

Dmitry
13.09.2018
08:19:16
Заходишь в psql, пишешь insert без commit - получаешь запись в базу
А чтобы начать транзакцию - пилишь begin

Николай
13.09.2018
08:22:57
Уф... В любом случае, спасибо за наводку

Serge
13.09.2018
08:40:27
Dmitry попробуй ibrowse, у нас на тестах он работает стабильнее, но пока не переключались на него.
Dmitry у меня через некоторое время утекают дескрипторы и hackney начинает таймаутить + ошибка :emfile, версия последняя у hackney.

Dmitry
13.09.2018
09:18:17
@summersanta Учитывая, что hackney использует бинари, а ibrowse листы, то мне лично кажется проще переделать hackney, чем переходить на ibrowse.

Егор
13.09.2018
11:01:37

Haanan
13.09.2018
14:15:45
Может им так легче на фронте обрабатывать?
В любом случае стандарт требует чтобы статус был в секции метаинформации
https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Dmitry
13.09.2018
15:15:37
Статус - это часть протокола HTTP
Ни а какой секции меты он быть не должен

Google

Dmitry
13.09.2018
15:17:17
В протоколе его место называется status-line
И это первая строка
HTTP/1.1 200 OK

Andrey
13.09.2018
15:22:41
что значит не должен? твоя конкретная реализация api может его там продублировать если хочет. Если например этот статус значимый для api. И тогда при переходе с HTTP на другой транспортный протокол не придется искать место для этого статуса, например

Dmitry
13.09.2018
15:23:09
Не должен это значит не должен. Ничего больше

Alexandra
13.09.2018
17:58:43
Ищу разработчика Senior Elixir/ Ruby on Rails в Киев (в офис) 4000 - 5000$,простите если у вас не принято выкладовать вакансии ,вся надежда на релокейт

Alexander
13.09.2018
18:00:09
ничесе

Sergey
13.09.2018
18:00:26

Alexandra
13.09.2018
18:01:15
https://docs.google.com/document/d/1vJO_QBvV10UVy1d0rnJYOX9JtRiGu0DorINDW0xdZXc/mobilebasic
тут вся информация о компании,команде,технологиях
будут вопросы-задай
*задавай

Igor
13.09.2018
18:07:27
Чё совсем в Киеве нет желающих?

Alexandra
13.09.2018
18:08:41
не все в Киеве с бекграундом Руби он Раил(

Igor
13.09.2018
18:09:20
Зачем именно этот бекграунд?

Alexandra
13.09.2018
18:12:51
тонкости свои,заказчик настаивал на Руби

Buckler
14.09.2018
04:00:53
Привет, Gillan!
Пожалуйста, реши капчу:
Вычисли: 55+57=...
Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!
Привет, Annetta!
Пожалуйста, реши капчу:
Вычисли: 86+48=...
Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!
Привет, Concettina!
Пожалуйста, реши капчу:
Вычисли: 86+1=...
Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!

Google

Admin
ERROR: S client not available

Buckler
14.09.2018
10:27:47
Привет, Sus!
Пожалуйста, реши капчу:
Вычисли: 8+43=...
Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!

Artem
14.09.2018
13:03:19
https://donetsk.hh.ua/vacancy/27580001

Buckler
14.09.2018
17:25:35
Привет, tara!
Пожалуйста, реши капчу:
Вычисли: 31+19=...
Осталось попыток: 3
Если не решишь - забаню навеки...
Удачи!

Сергей
15.09.2018
11:35:16
Привет всем! У меня немного холиварный вопрос. Почему вы решили использовать Elixir, а не Erlang? Как по мне Erlang на много проще.
Проще в смысле для каких-нибудь realtime приложений, типа стриминга или биржевых приложений

Alexander
15.09.2018
12:01:29
Вопрос со строками и utf в эликсире решен радикально и хорошо
Эликсир вообще - это эрланг с макросами лиспа.

Сергей
15.09.2018
12:19:24

Dmitry
15.09.2018
12:20:15

Сергей
15.09.2018
12:20:29

Dmitry
15.09.2018
12:21:15
Мне эрланг не понравился из-за синтаксиса и какой-то мути со строками ?

Сергей
15.09.2018
12:21:36
Мы просто отдаём поток данных по бинарному протоколу
Строки практически не задействуем
А для веб я бы взял что-нибудь другое, но не phoenix
Кстати синтаксис Erlanga проще, но к нему нужно привыкнуть

Dmitry
15.09.2018
12:27:57

Google

Сергей
15.09.2018
12:30:34

Dmitry
15.09.2018
12:31:07
Ну мы в чате по эликсиру все-таки, я поэтому не говорю про ruby, go, .net и прочее)

Сергей
15.09.2018
12:34:08
Логично. Но сравнение иногда не помешает. Просто есть много людей которые хотят использовать технологию не по назначению... И тогда лучше их направить на правильный путь ?

Evgeny
15.09.2018
18:28:20

Сергей
15.09.2018
18:54:51
Если да, с какими подводными комнями пришлось столкнуться?

Den
15.09.2018
19:06:32

Dmitry
15.09.2018
22:27:12
В чем проблема строк в BEAM?