Size: a a a

2019 December 23

ŹR

Źmićer Rubinštejn in pro.elixir
V
Длина строки не влияет на объём памяти, занимаемый атомом :)
:foo занимает столько же байт, сколько :longest_world_ever_fooooo
потому что то что мы видим в сырцах в виде`:atom_name` существует только до компиляции
А как он тогда в рантайме знает, что атом :foo, который делается из строчки уже был?
источник

AB

Alexey Bolshakov in pro.elixir
общий привет!
вопрос про падение процесса виртуальной машины.
у меня бывает падение приложения целиком, при этом в консоли ВМ будет написано, что приложение упало, остановлено, при этом остается запущенной сама виртуальная машина.
как сделать, чтобы и сама виртуалка тоже падала, как процесс ОС?
источник

V

V in pro.elixir
Źmićer Rubinštejn
А как он тогда в рантайме знает, что атом :foo, который делается из строчки уже был?
Отличный вопрос. Я забыл про рантайм. Видимо, хранит строковые названия.
источник

I

Igor Levin in pro.elixir
Źmićer Rubinštejn
А как он тогда в рантайме знает, что атом :foo, который делается из строчки уже был?
так ведь лукап делает в таблицу атомов, насколько я помню
источник

I

Igor Levin in pro.elixir
ключ - атом, значение - чиселко
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Да. Поэтому если атом будет очень длинный - таблице будет бобо
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И есть лимит на размер атома
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Aleksey Kuznietsov
приветы. есть две модели в базе, Event has many EventInvitee (https://pastebin.com/8ZaQ06eL)

при попытке обновить содержимое Event:

Repo.get_by(Event, event_id: event_id)
|> Event.changeset(%{description: "Foo bar"})
|> Repo.insert!()


падает ошибка

**
 (RuntimeError) attempting to cast or change association `event_attendees` from `Event` that was not loaded. Please preload your associations before manipulating them through changesets

и если добавить

Repo.get_by(Event, event_id: event_id)
|> Repo.preload(:event_attendees)

то ошибка уходит. в changeset у Event как видно в pastebin, я ничего с ассоциированными invitees не делаю

вопрос на миллион - это вообще ок что эликсир требует ненужного джоина в этом случае?
Вопрос на миллион: ты уверен, что обновление существующей записи осуществляется с помощью Repo.insert?
источник

ВК

Василий Кузнецов in pro.elixir
Źmićer Rubinštejn
И есть лимит на размер атома
таблица просто посылает на ... при попытке вставить длинный атом, так что бобо не будет
*atom length must be less than system limit*
источник

AK

Aleksey Kuznietsov in pro.elixir
Źmićer Rubinštejn
Вопрос на миллион: ты уверен, что обновление существующей записи осуществляется с помощью Repo.insert?
Там код на самом деле сложнее, это может быть или новая или существующая запись и upsert с on_conflict
источник

AK

Aleksey Kuznietsov in pro.elixir
Я упростил для сужения скоупа вопроса
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Мне кажется, что проблема в том, что для обновления не надо preload, а для insert - надо.
источник

AK

Aleksey Kuznietsov in pro.elixir
Прелоад для инсерта? То есть записи ещё нет в базе, но Экто хочет сразу и ассоциации?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Фишка в том, что в отличие от новой записи у тебя запись скачана из базы
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И в поле attendees не пусто, а ecto_not_preloded
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Если он обновляет - он на это не обращает внимания. А если вставляет - то понятно что ему нужны все поля, но вот как вставить ecto_not_preloded он не знает и не должен знать
источник

AK

Aleksey Kuznietsov in pro.elixir
Я вообще не понимаю при чем тут ассоциация, это has many то есть optional вещь
источник

AK

Aleksey Kuznietsov in pro.elixir
Есть ченжсет, там нет ассоциации. Вставка должна работать по ченжсету
источник

AK

Aleksey Kuznietsov in pro.elixir
В моей картине мира это логично )
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ты проверь сперва, что я тебе говорю - может мне все приснилось. Но если я прав - я тебе объясню почему
источник