Size: a a a

2019 December 22

IR

Ivan Rublev in pro.elixir
Dmitry Russ (Aleksandrov)
Привет! Как сейчас ssl принято запускать? Прятать cowboy (+ websocket-ы) за nginx и терминировать там или есть люди, кто без nginx и делают терминирование прямо в cowboy-е?
Еще возможный вариант это облако (AWS/GCP/Azure) с Kubernetes. Его компонент Ingress терминирует SSL/TLS и балансирует нагрузку на кластер. Внутри кластера идет уже HTTP траффк. Что означает, что узел кластера деплоиться с обычным HTTP.
Сам Ingress это обертка над nginx или эквивалентным сервером, с минимумом настроек - обычно номера портов и файлы сертификата.
источник
2019 December 23

МБ

Максим Барулин in pro.elixir
Коллеги, подскажите, кто глубоко копал в атомы. Есть две функции String.to_atom/1 и String.to_existing_atom/1. Если есть атом :foo и вызвать String.to_atom("foo") она создаст ещё один атом :foo или всё-таки вернёт уже существующий?
источник

PG

Pïg Grëënëst in pro.elixir
там нечего копать, to_existing_atom кидает исключение, если такого атома нет
источник

МБ

Максим Барулин in pro.elixir
да это понятно
источник

МБ

Максим Барулин in pro.elixir
я про неё не спрашиваю
источник

PG

Pïg Grëënëst in pro.elixir
существующий вернет
источник

МБ

Максим Барулин in pro.elixir
тогда теряется смысл to_existing_atom
источник

PG

Pïg Grëënëst in pro.elixir
хотя падажжи
источник

V

V in pro.elixir
Аааа!
источник

V

V in pro.elixir
Максим Барулин
Коллеги, подскажите, кто глубоко копал в атомы. Есть две функции String.to_atom/1 и String.to_existing_atom/1. Если есть атом :foo и вызвать String.to_atom("foo") она создаст ещё один атом :foo или всё-таки вернёт уже существующий?
Атомы существуют в единственном экземпляре. Вернёт существующий. В каком бы месте программы ты не обратился к :foo - это будет один и тот же :foo.
источник

PG

Pïg Grëënëst in pro.elixir
Warning: this function creates atoms dynamically and atoms are not garbage-collected. Therefore, string should not be an untrusted value, such as input received from a socket or during a web request. Consider using to_existing_atom/1 instead.
источник

PG

Pïg Grëënëst in pro.elixir
так к чему относится данное предупреждение, «не суйте большие строки в эту функцию» или «не спамьте генерированными атомами»?
источник

SM

Sergei Maximov in pro.elixir
Максим Барулин
Коллеги, подскажите, кто глубоко копал в атомы. Есть две функции String.to_atom/1 и String.to_existing_atom/1. Если есть атом :foo и вызвать String.to_atom("foo") она создаст ещё один атом :foo или всё-таки вернёт уже существующий?
Атомы в Elixir существуют в единственном экземпляре. Ты не можешь создать какой-то другой атом :foo, если у тебя уже есть атом :foo — это будет один и тот же атом.
источник

SM

Sergei Maximov in pro.elixir
Pïg Grëënëst
так к чему относится данное предупреждение, «не суйте большие строки в эту функцию» или «не спамьте генерированными атомами»?
Второе
источник

PG

Pïg Grëënëst in pro.elixir
тогда в чем опасность?
источник

SM

Sergei Maximov in pro.elixir
Либо будет достигнут лимит атомов (:erlang.system_info(:atom_limit)), либо память закончится.
источник

V

V in pro.elixir
Pïg Grëënëst
так к чему относится данное предупреждение, «не суйте большие строки в эту функцию» или «не спамьте генерированными атомами»?
Длина строки не влияет на объём памяти, занимаемый атомом :)
:foo занимает столько же байт, сколько :longest_world_ever_fooooo
потому что то что мы видим в сырцах в виде`:atom_name` существует только до компиляции
источник

МБ

Максим Барулин in pro.elixir
👍👍
источник

a

arikai in pro.elixir
Pïg Grëënëst
так к чему относится данное предупреждение, «не суйте большие строки в эту функцию» или «не спамьте генерированными атомами»?
Скорее, “не пытайтесь создавать атомы динамически из строк из непроверенных источников”

Простой вариант: конвертировать пришедшие по сети строки (допустим, в структуре json-а) в атомы. Тебя задудосить слишком просто будет.
источник

AK

Aleksey Kuznietsov in pro.elixir
приветы. есть две модели в базе, 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 не делаю

вопрос на миллион - это вообще ок что эликсир требует ненужного джоина в этом случае?
источник