[RUBY] 26e jour d'ingénieur qui deviendra à part entière dans 100 jours

26e jour d'ingénieur qui deviendra à part entière dans 100 jours

Oui, c'est le 26e jour au plus tôt. Thème d'aujourd'hui

Après vous être connecté à redis avec docker, effectuez un traitement asynchrone à l'aide de sidekiq

Je le ferai.

DockerFile

Tout d'abord, ajoutez la description de redis au fichier docker.

L'image et le numéro de port sont spécifiés dans la redis: part. Après cela, j'ai spécifié redis_url dans l'environnement.

version: '3'
services:
  db:
    image: postgres:11.2-alpine
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: /bin/sh
    environment:
      WEBPACKER_DEV_SERVER_HOST: "0.0.0.0"
      RAILS_SERVE_STATIC_FILES: "1"
      EDITOR: "vim"
      REDIS_URL: redis://redis:6379
    volumes:
      - ./apps:/apps
    ports:
      - "3000:3000"
      - "3035:3035"
    depends_on:
      - db
    tty: true
      
  redis:
    image: redis:latest
    ports:
      - 6379:6379

Le Gemfile ressemble à ceci.

Gemfile

gem 'redis-rails' gem'sidekiq 'est ajouté. Puisqu'une erreur s'est produite lors de la mise à jour de sidekiq, la version est spécifiée comme suit. gem 'sidekiq', "~> 5.0"

source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "2.6.4"

gem "rails", "~> 6.0.0"
gem "pg", ">= 0.18", "< 2.0"
gem "puma", "~> 3.11"
gem "sass-rails", "~> 5"
gem "webpacker", "~> 4.0"
gem "turbolinks", "~> 5"
gem "jbuilder", "~> 2.7"

gem "bootsnap", ">= 1.4.2", require: false

gem "bcrypt"
gem "rails-i18n"
gem "kaminari"
gem "date_validator"
gem "valid_email2"
gem "nokogiri"
gem "slim-rails"
gem "html2slim"

#ajouter
gem 'redis-rails'
gem 'sidekiq', "~> 5.0"
...

config

Ajoutez maintenant les paramètres suivants à config / initializers / redis.rb. Vous avez maintenant ajouté l'URL redis.

redis.rb


REDIS ||= Redis.new(url: ENV['REDIS_URL'] || 'redis://localhost:6379')

Et ajoutez le paramètre sidekiq à config / environment / development.rb

config/environment/development.rb


config.active_job.queue_adapter = :sidekiq

Maintenant que nous avons modifié le Gemfile, exécutez la commande bundle

$ bundle

Démarrer sidekiq

Exécutez ensuite la commande bundle exec sidekiq pour démarrer Sidekiq.

$ bundle exec sidekiq

bash-4.4$ bundle exec sidekiq


         m,
         `$b
    .ss,  $$:         .,d$
    `$$P,d$P'    .,md$P"'
     ,$$$$$bmmd$$$P^'
   .d$$$$$$$$$$P'
   $$^' `"^$$$'       ____  _     _      _    _
   $:     ,$$:       / ___|(_) __| | ___| | _(_) __ _
   `b     :$$        \___ \| |/ _` |/ _ \ |/ / |/ _` |
          $$:         ___) | | (_| |  __/   <| | (_| |
          $$         |____/|_|\__,_|\___|_|\_\_|\__, |
        .d$$                                       |_|

Je me suis levé correctement. À partir de là, j'écrirai un traitement asynchrone.

Traitement asynchrone

Créer un emploi

$ bin/rails g job sample

Running via Spring preloader in process 22386
  invoke test_unit
  create...

La tâche est maintenant générée. Le fichier app / jobs / sample_job.rb a été créé. Cette fois, la tâche écrira une tâche pour afficher une chaîne de caractères dans le journal.

class SampleJob < ApplicationJob
  queue_as :default

  def perform(*args)
    Sidekiq::Logging.logger.info "-----J'ai exécuté un exemple de travail.-----"
  end
end

J'écrirai comme ça. Puisque le cadre extérieur est créé par le travail rails g, chaque pièce n'est en fait que la ligne Sidekiq :: Logging ....

Appelez le travail sur le contrôleur

Appelez le travail sur le contrôleur.

Un travail de sortie de journal est exécuté de manière asynchrone à l'aide d'une méthode appelée perform_later.

controller.rb


class Admin::TopController < Admin::Base
  def index
    SampleJob.perform_later
  end
end

Lorsque vous accédez à l'écran d'index et vérifiez le journal sidekiq.

2020-06-15T11:30:52.383Z 15 TID-gphk3l13j SampleJob JID-631a85bb82f73f2a07beb772 INFO: ---------J'ai exécuté un exemple de travail.-------------

Vous pouvez voir que le travail s'exécute de manière asynchrone comme ceci!

Spécifiez la date et l'heure d'exécution

Vous pouvez également spécifier la date et l'heure d'exécution. Vous pouvez utiliser la méthode set pour exécuter le travail à midi le lendemain.

SampleJob.set(wait_until: Date.tomorrow.noon).perform_later

La fin

C'est tout pour le traitement asynchrone utilisant sidekiq après la connexion à redis avec docker. Merci beaucoup.

** Il reste 74 jours jusqu'à ce qu'il soit à part entière **

Recommended Posts

26e jour d'ingénieur qui deviendra à part entière dans 100 jours
28e jour d'ingénieur qui deviendra à part entière dans 100 jours
Nouvel ingénieur qui servira en 100 jours (5e jour)
Nouvel ingénieur qui servira en 100 jours (6e jour)
Nouvel ingénieur qui servira en 100 jours (4e jour)
Nouvel ingénieur qui servira dans 100 jours (jour 0)
Nouvel ingénieur qui servira en 100 jours (3e jour)
Nouvel ingénieur qui servira en 100 jours (1er jour)
Nouvel ingénieur qui servira en 100 jours (2ème jour)
《Inexpérimenté → ingénieur web》 5ème jour de pratique
《Inexpérimenté → ingénieur web》 4ème jour de pratique
java learning day 4
《Inexpérimenté → ingénieur web》 2ème jour de pratique
《Inexpérimenté → ingénieur web》 3e jour de pratique
《Inexpérimenté → ingénieur web》 1er jour de pratique
TECH CAMP (Changement de carrière d'ingénieur) Revue des contenus d'apprentissage dans la 6ème semaine
TECH CAMP (Changement de carrière d'ingénieur) Bilan de ce qui a été appris lors de la 4ème semaine