Новое: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 источников: карьерные страницы компаний и джоб-борды.

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

Какие production-риски есть у Ruby on Rails: blocking code, connection pooling, config, auth, observability, deploy или graceful shutdown?

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

Основные production-риски Rails: блокирующий I/O в синхронных контроллерах, исчерпание пула БД, утечки соединений, небезопасные дефолты auth (mass assignment, IDOR), отсутствие structured logging и проблемы с graceful shutdown при деплое.

1. Blocking code и модель потоков

Puma использует thread-per-request модель. Один медленный запрос (внешний HTTP, файловая операция) блокирует поток. При RAILS_MAX_THREADS=5 пять одновременных медленных запросов исчерпывают пул.

# Плохо: синхронный HTTP внутри контроллера
def show
  result = Net::HTTP.get(URI("https://slow-api.example.com/data"))
  render json: result
end

# Хорошо: вынести в фоновый джоб
def show
  FetchExternalDataJob.perform_later(current_user.id)
  render json: { status: "queued" }
end

Production-риски Ruby on Rails

2. Connection Pooling

ActiveRecord использует пул соединений из config/database.yml. Значение pool должно соответствовать RAILS_MAX_THREADS. Превышение вызывает ActiveRecord::ConnectionTimeoutError.

# config/database.yml
production:
  adapter: postgresql
  url: <%= ENV["DATABASE_URL"] %>
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  checkout_timeout: 5
  idle_timeout: 300
  connect_timeout: 5

При Sidekiq (concurrency: 25) пул должен быть не меньше 25 + запас для web.

3. Конфигурация и секреты

Не передавайте секреты через config/credentials.yml.enc без rotation-процесса. Используйте переменные окружения или Vault:

# Проверить что секреты не попали в git
git log --all --full-history -- config/master.key
# Ротация ключа
RAILS_ENV=production rails credentials:diff

4. Безопасность аутентификации и авторизации

  • Mass assignment: без строгого params.require(:user).permit(:name, :email) возможна инъекция admin: true.
  • IDOR: Post.find(params[:id]) без проверки владельца даёт доступ к чужим данным. Всегда используйте current_user.posts.find(params[:id]).
  • Session fixation: вызывайте reset_session после логина.
# Безопасный паттерн
def update
  @post = current_user.posts.find(params[:id]) # scope к пользователю
  @post.update!(post_params)
end

private

def post_params
  params.require(:post).permit(:title, :body) # whitelist
end

5. Observability

Rails по умолчанию пишет plain-text лог. В production нужен structured JSON для Datadog/Loki:

# config/environments/production.rb
config.log_formatter = proc do |severity, datetime, progname, msg|
  { level: severity, time: datetime, msg: msg }.to_json + "\n"
end

# Или через гем lograge
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Json.new
config.lograge.custom_options = ->(event) {
  { user_id: event.payload[:user_id], request_id: event.payload[:request_id] }
}

6. Graceful Shutdown и деплой

Puma поддерживает graceful shutdown через SIGTERM — дожидается завершения in-flight запросов. Kubernetes должен отправлять SIGTERM и ждать terminationGracePeriodSeconds.

# config/puma.rb
workers ENV.fetch("WEB_CONCURRENCY") { 2 }
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
threads threads_count, threads_count

on_worker_shutdown do
  ActiveRecord::Base.connection_pool.disconnect!
end

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

  • После hot restart Puma старые воркеры доживают запросы, но новые уже обрабатывают трафик — миграции с удалением колонок должны быть в отдельном деплое.
  • ActiveRecord::Base.connection в потоке, не управляемом Rails, не возвращает соединение в пул — всегда оборачивайте в with_connection.
  • Devise по умолчанию хранит remember_me токен в виде SHA1 — обновляйте stretches и используйте Devise 4.9+.
  • Rack::Attack без лимитов на /api/v1/sessions позволяет брутфорс паролей — добавьте throttle по IP и email.
  • Rails.logger.info в hot path создаёт много строк и аллоцирует память — используйте уровень :warn в production для не-критичных событий.
  • Отсутствие health check endpoint с проверкой БД и Redis вызывает проблемы при rolling deploy — Kubernetes считает pod healthy пока не настроен readinessProbe.
  • N+1 в GraphQL или serializer незаметен в dev, но на production при 1000 записях убивает БД — используйте Bullet в staging и query count assertions в тестах.
  • Sidekiq без Redis Sentinel/Cluster — единая точка отказа: падение Redis останавливает всю обработку джобов.

Что портит ответ

  • Говорить только о запуске Ruby on Rails, но не об эксплуатации
  • Не упоминать observability, обновления, безопасность и rollback
  • Описывать риски абстрактно, без способов их снижать

Что слушает интервьюер

  • Видит production-риски Ruby on Rails
  • Говорит про monitoring, rollout, rollback и безопасность
  • Умеет ранжировать риски по вероятности и влиянию

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

Проверить себя по теме Ruby on Rails →
←Предыдущий вопросЧто такое strong parameters в Rails и почему они важны для безопасности?Следующий вопрос→Проект на Ruby on Rails вырос из MVP в большой production-сервис. Какие проблемы архитектуры и сопровождения вы ожидаете увидеть?

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

Ruby on Railsproduction-readinesstechnical-communicationtechnology-selectiontrade-off-analysis

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

  • Как Rails обрабатывает защиту от CSRF?
  • Что такое паттерн MVC и как Rails его реализует?
  • Что такое migrations в Rails и как их создавать и запускать?
  • В каких backend-проектах Ruby on Rails является сильным выбором, а где лучше выбрать более простой или другой стек?