Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 433
  • Backend вакансии2 035
  • Инженер данных1 666
  • Продакт-менеджер1 162

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность398

Аналитика и данные

  • Data Scientist1 033
  • Бизнес-аналитик868
  • Аналитик данных829
  • Системный аналитик134

Другие направления

  • Проджект-менеджер524
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 779
  • Вакансии в Европе21 327
  • Вакансии в Канаде4 450
  • Работа в России3 877

По формату

  • Удалённые вакансии73 902
  • Релокация в США44 794
  • Гибридная работа11 412
  • Офисная работа6 956

По уровню

  • Senior вакансии41 197
  • Middle вакансии20 361
  • Junior вакансии6 638

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме ElixirВсе вопросы
ElixirSeniorПроектирование систем

Как развернуть приложение Elixir/OTP с помощью releases?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Mix releases собирают самодостаточный архив с BEAM, приложением и конфигом. Команды: mix release, затем _build/prod/rel/app/bin/app start. Конфигурация runtime через Config.Provider или releases config/runtime.exs.

Подготовка: mix.exs

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      app: :my_app,
      version: "1.0.0",
      releases: [
        my_app: [
          include_executables_for: [:unix],
          steps: [:assemble, :tar]
        ]
      ]
    ]
  end
end

Развёртывание Elixir/OTP с помощью Mix Releases

Mix Releases (добавлены в Elixir 1.9) создают самодостаточный пакет: BEAM runtime, скомпилированные .beam-файлы, конфигурацию и стартовые скрипты. Сервер не требует установки Elixir или Erlang.

Runtime-конфигурация

Файл config/runtime.exs читается при каждом старте приложения (не при сборке), что позволяет использовать переменные окружения:

# config/runtime.exs
import Config

config :my_app, MyApp.Repo,
  url: System.fetch_env!("DATABASE_URL"),
  pool_size: String.to_integer(System.get_env("POOL_SIZE", "10"))

config :my_app, MyAppWeb.Endpoint,
  secret_key_base: System.fetch_env!("SECRET_KEY_BASE"),
  url: [host: System.fetch_env!("PHX_HOST"), port: 443, scheme: "https"]

Сборка release

# Локальная сборка (dev-режим)
mix release

# Production (обычно в CI/Docker)
MIX_ENV=prod mix release

# Артефакт:
# _build/prod/rel/my_app/
# Tar-архив: _build/prod/my_app-1.0.0.tar.gz

Dockerfile для production

# Dockerfile
FROM elixir:1.16-otp-26-slim AS builder
WORKDIR /app
COPY mix.exs mix.lock ./
RUN mix deps.get --only prod
COPY config/ config/
RUN MIX_ENV=prod mix compile
COPY lib/ lib/
RUN MIX_ENV=prod mix release

FROM debian:bookworm-slim AS runner
WORKDIR /app
COPY --from=builder /app/_build/prod/rel/my_app ./
ENV PHX_HOST=example.com SECRET_KEY_BASE=xxx DATABASE_URL=ecto://...
CMD ["bin/my_app", "start"]

Управление запущенным release

# Запуск в foreground
bin/my_app start

# Daemon
bin/my_app daemon

# Remote IEx shell к запущенному узлу
bin/my_app remote

# Eval (миграции БД)
bin/my_app eval "MyApp.Release.migrate()"

# Graceful stop
bin/my_app stop

Запуск миграций Ecto без Mix

# lib/my_app/release.ex
defmodule MyApp.Release do
  def migrate do
    {:ok, _} = Application.ensure_all_started(:my_app)

    for repo <- repos() do
      {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true))
    end
  end

  defp repos do
    Application.fetch_env!(:my_app, :ecto_repos)
  end
end

Подводные камни

  • Release собирается под конкретную ОС и версию BEAM — собранный на macOS артефакт не запустится на Linux; всегда собирайте в Docker с целевой ОС.
  • config/config.exs и config/prod.exs вычисляются во время компиляции, а не старта — переменные окружения там не доступны; используйте только config/runtime.exs.
  • System.fetch_env!/1 в runtime.exs упадёт при старте, если переменная не задана — это желаемое поведение, но неожиданное в staging без полного .env.
  • Флаг :tar в steps создаёт архив, но не удаляет несжатую директорию — в CI занимает лишнее место.
  • Remote shell через bin/app remote требует совпадения cookie между строящим и запущенным узлом.
  • include_executables_for: [:unix] не создаёт Windows .bat скрипты — важно при cross-platform CI.
  • Mix.install/1 недоступен в release — все зависимости должны быть в mix.exs.
  • Горячее обновление кода (appup/relup) совместимо с releases, но требует ручной генерации appup-файлов; ошибка в appup может привести к partial upgrade и несогласованному состоянию.

Частые вопросы на собеседовании

  • В чём разница между spawn, Task и GenServer для выполнения конкурентного кода?
  • Что такое pattern matching в Elixir и как он используется в ветвях функций (function clauses)?
  • В чём разница между модулем и структурой (struct) в Elixir?
  • Что такое иммутабельность в Elixir и почему она важна для параллелизма?

Типичные ошибки

  • Сводить otp releases к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Elixir компилируется в BEAM bytecode и наследует процессы, message passing, supervision и hot-code friendly модель Erlang VM.
  • Не отделять validation, authorization, transaction boundary и business logic.
  • Не обсуждать idempotency, retries, shutdown и observability.

Что проверяет интервьюер

  • Объясняет otp releases через конкретную точку lifecycle в Elixir.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.
  • Связывает решение с метриками, backpressure, retry policy и graceful shutdown.

Как вы знаете этот вопрос?

Проверить себя по теме Elixir →

Источники

  • https://hexdocs.pm/mix/Mix.Tasks.Release.html
  • https://hexdocs.pm/elixir/

Связанные темы

ElixirBackend-Engineeringelixir-ecosystemproduction-readinesssystem-design