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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

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

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

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

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США25 642
  • Вакансии в Европе10 259
  • Работа в России3 639
  • Вакансии в Канаде2 255

По формату

  • Удалённые вакансии42 339
  • Релокация в США25 642
  • Гибридная работа5 706
  • Офисная работа4 402

По уровню

  • Senior вакансии22 510
  • Middle вакансии11 429
  • Junior вакансии3 877

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Что такое ActionCable в Rails и для чего он используется?

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

ActionCable — встроенный WebSocket-фреймворк Rails, работающий поверх Rack hijack. Позволяет создавать «каналы» для двусторонней real-time коммуникации с браузером через pub/sub на Redis.

Пример: чат-канал

# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  def subscribed
    room = Room.find(params[:room_id])
    reject unless current_user.can_access?(room)
    stream_from "chat_room_#{room.id}"
  end

  def speak(data)
    message = Message.create!(
      room_id: params[:room_id],
      user: current_user,
      body: data["body"]
    )
    ActionCable.server.broadcast(
      "chat_room_#{message.room_id}",
      { user: current_user.name, body: message.body }
    )
  end
end
# app/channels/application_cable/connection.rb
module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user

    def connect
      self.current_user = find_verified_user
    end

    private

    def find_verified_user
      if (token = request.params[:token])
        User.find_by!(ws_token: token)
      else
        reject_unauthorized_connection
      end
    end
  end
end
// JavaScript-клиент (Stimulus / Vanilla)
import consumer from "./consumer";

const subscription = consumer.subscriptions.create(
  { channel: "ChatChannel", room_id: 42 },
  {
    received(data) {
      console.log(data.user, data.body);
    },
    speak(body) {
      this.perform("speak", { body });
    },
  }
);

Что такое ActionCable

ActionCable интегрирует WebSocket в Rails-приложение как первоклассный гражданин. Он использует Rack hijack API для удержания TCP-соединения открытым и обёртывает его абстракцией «канал» (Channel). Внутри используется EventMachine или async-адаптер для обработки тысяч одновременных соединений в рамках одного процесса.

Основные компоненты

  • Connection — объект соединения, аутентифицирует пользователя при handshake.
  • Channel — серверный класс, наследует ApplicationCable::Channel, определяет методы subscribed, unsubscribed и action-методы.
  • Subscription — клиентская сторона, JavaScript-объект, подписывающийся на канал.
  • Adapter — pub/sub бэкенд: Redis (production), Async (development), PostgreSQL (альтернатива).

Конфигурация Redis-адаптера

# config/cable.yml
production:
  adapter: redis
  url: <%= ENV["REDIS_URL"] %>
  channel_prefix: myapp_production

Broadcast из фоновой задачи

Из любого места приложения (модель, Job, сервис) можно вызвать:

ActionCable.server.broadcast(
  "notifications_#{user.id}",
  { type: "order_shipped", order_id: order.id }
)

Масштабирование

ActionCable работает в async-режиме внутри Puma. При нескольких процессах/серверах все они подписываются на один Redis-канал, поэтому broadcast доходит до нужного клиента независимо от того, к какому поду он подключён. Для Kubernetes используйте channel_prefix чтобы изолировать окружения.

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

  • Каждое открытое WebSocket-соединение удерживает поток или файловый дескриптор — при 10 000 соединений нужен тюнинг ulimit и config.action_cable.worker_pool_size.
  • ActionCable не работает нормально за nginx без директив proxy_http_version 1.1 и proxy_set_header Upgrade $http_upgrade.
  • Вызов тяжёлых операций напрямую внутри action-метода канала блокирует весь пул потоков — выносите в ActiveJob.
  • Redis-адаптер сохраняет подписки только до перезапуска сервера: reconnect клиента нужно обрабатывать явно через consumer.subscriptions.reload().
  • CSRF-защита на WS не работает стандартным способом — аутентифицируйте через request.session или подписанный токен, не через куки напрямую.
  • При деплое без sticky sessions часть клиентов будет переподключаться к другому поду и снова проходить handshake — добавьте exponential backoff на клиенте.
  • Тестирование через ActionCable::Channel::TestCase требует явного вызова subscribe и проверки transmissions — легко пропустить при написании specs.

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

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

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

  • Сводить action cable к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Rails 8.1 строит приложение вокруг Rack, routing, controllers, Active Record, views и conventions over configuration.
  • Не отделять validation, authorization, transaction boundary и business logic.
  • Не обсуждать idempotency, retries, shutdown и observability.

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

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

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

Проверить себя по теме Ruby on Rails →

Источники

  • https://guides.rubyonrails.org/action_cable_overview.html
  • https://guides.rubyonrails.org/

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

Ruby on RailsBackend-Engineeringproduction-readinessruby-on-rails-ecosystemsystem-design