Rafael Pereira Alonso
Computer Science student at the Federal University of São Carlos - Sorocaba and Ruby On Rails Teacher
Imagine ter que enviar um email de campanha para milhares de usuários da sua plataforma. Para isso, você cria uma funcionalidade de escrever o email em sua própria plataforma, selecionar para quem deve ser enviado (todos os usuários) e clicar em "Enviar".
Quanto tempo você teria que esperar?
Imagine criar uma funcionalidade que permite que usuários definam lembretes para serem enviados em certos dias/horários.
Como você implementaria isso?
Pense no Redis como um "Banco de Dados" onde, ao invés de tabelas, as estruturas dos dados são Hashes (aka key-value store)
# On macOS
brew update
brew install redis
brew services start redis
# On Ubuntu
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
sudo apt-get install redis-serverSe quisermos "zerar" o Redis, podemos executar o seguinte comando:
redis-cli flushall
O sidekiq é o executador de processos no background, utilizando as infos armazenadas no Redis para saber quais processos precisam ser executados, em qual ordem e com quais parâmetros.
Para utilizarmos o Sidekiq em um projeto Rails, precisamos adicionars suas gems ao Gemfile
# Gemfile
gem "sidekiq", "~> 7"
gem "sidekiq-failures"Não esqueçam do bundle install!
Também precisamos adicionar o comando do Sidekiq ao nosso terminal, para iniciá-lo! Podemos fazer isso com
bundle binstub sidekiqAlém das gems, precisamos configurar o Rails e o próprio Sidekiq!
# config/application.rb
# [...]
class Application < Rails::Application
# [...]
# defina o Sidekiq como o "executador de processos" do Rails
config.active_job.queue_adapter = :sidekiq
end# config/routes.rb
Rails.application.routes.draw do
# Sidekiq Web UI, only for admins.
require "sidekiq/web"
authenticate :user, ->(user) { user.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
endAlém das gems, precisamos configurar o Rails e o próprio Sidekiq!
# config/sidekiq.yml
:concurrency: 3
:timeout: 60
:verbose: true
:queues:
# Queue priority:
# https://github.com/sidekiq/sidekiq/wiki/Advanced-Options
- default
- mailersBy Rafael Pereira Alonso
Nona Aula da Atividade Complementar de Ruby On Rails, lecionada na Universidade Federal de São Carlos, campus Sorocaba, no primeiro semestre de 2019
Computer Science student at the Federal University of São Carlos - Sorocaba and Ruby On Rails Teacher