Skip to content

3 Tutorial Sidekiq

Pedro Germano Cervi edited this page Jul 6, 2019 · 9 revisions

Setup

Implemente o Tutorial CRUD e depois o Tutorial API Discogs ou comece esse tutorial a partir dessa branch. Para esse tutorial vamos precisar executar os testes da pasta tutorials/sidekig-tutorial somente com: rspec spec/tutorials/sidekiq_tutorial/*.

Instale a gem sidekiq

no arquivo Gemfile adicione a seguinte linha à lista de gems gerais:

gem 'sidekiq'

execute bundle install

Monte e execute o sidekiq

no arquivo config/routes.rb crie rotas para a interface do sidekiq da seguinte forma:

require 'sidekiq/web'

Sidekiq::Web.app_url = '/'

Rails.application.routes.draw do
  mount Sidekiq::Web => '/sidekiq'
  root 'home#show'

  ...
end

com o redis executando em segundo plano execute o sidekiq com bundle exec sidekiq

com o servidor rodando e um usuário conectado deve ser possível acessar a interface em localhost:3000/sidekiq

Crie um worker para o sidekiq

crie a seguinte pasta: app/workers e nela insira um arquivo chamado import_artist_worker.rb

nesse arquivo adicione o seguinte conteúdo:

class ImportArtistWorker
  include Sidekiq::Worker

  def perform(artist_name, user_id)
    client = DiscogsRequestsService::Client.new
    artist = client.get_artist(artist_name)

    Artist.new(name: artist.name, profile: artist.profile, user_id: user_id).save
  end
end

agora pelo console deve ser possível chamar o worker com:

ImportArtistWorker.new.perform('Raul Seixas', User.first.id)

a execução do teste spec/tutorials/sidekiq_tutorial/workers/import_artist_worker_spec.rb deve passar

Modifique o controller de importações para utilizar o sidekiq

no arquivo app/controllers/imports_controller.rb modifique a ação artist da seguinte forma:

def artist
  if import_artist_params[:name].blank?
    redirect_to artists_path, notice: 'Please inform an artist'

    return
  end

  ImportArtistWorker.perform_async(import_artist_params[:name], current_user.id)

  redirect_to artists_path, notice: 'Your artist will be imported shortly.'
end

agora a execução do teste spec/tutorials/sidekiq_tutorial/controllers/imports_controller_spec.rb deve passar

além disso, importar um artist agora deve ocorrer de maneira assíncrona.