[RUBY] 26. Tag des Ingenieurs, der in 100 Tagen vollwertig sein wird

26. Tag des Ingenieurs, der in 100 Tagen vollwertig sein wird

Ja, es ist frühestens der 26. Tag. Das heutige Thema

Führen Sie nach dem Herstellen einer Verbindung zu redis mit Docker eine asynchrone Verarbeitung mit sidekiq durch

Ich werde das machen.

DockerFile

Fügen Sie zunächst die Beschreibung von redis zur Docker-Datei hinzu.

Das Bild und die Portnummer werden im redis: Teil angegeben. Danach habe ich redis_url in der Umgebung angegeben.

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

Das Gemfile sieht so aus.

Gemfile

gem 'redis-rails' gem'sidekiq 'wird hinzugefügt. Da beim Aktualisieren von sidekiq ein Fehler aufgetreten ist, wird die Version wie folgt angegeben. 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"

#hinzufügen
gem 'redis-rails'
gem 'sidekiq', "~> 5.0"
...

config

Fügen Sie nun die folgenden Einstellungen zu config / initializers / redis.rb hinzu. Sie haben jetzt die Redis-URL hinzugefügt.

redis.rb


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

Fügen Sie die sidekiq-Einstellung zu config / environment / development.rb hinzu

config/environment/development.rb


config.active_job.queue_adapter = :sidekiq

Nachdem wir die Gemfile geändert haben, führen Sie den Bundle-Befehl aus

$ bundle

Starten Sie sidekiq

Führen Sie dann den Befehl bundle exec sidekiq aus, um Sidekiq zu starten.

$ bundle exec sidekiq

bash-4.4$ bundle exec sidekiq


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

Ich bin richtig aufgestanden. Von hier aus werde ich asynchrone Verarbeitung schreiben.

Asynchrone Verarbeitung

Einen Job erstellen

$ bin/rails g job sample

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

Die Aufgabe wird jetzt generiert. Die Datei app / jobs / sample_job.rb wurde erstellt. Dieses Mal schreibt die Aufgabe eine Aufgabe, um eine Zeichenfolge im Protokoll anzuzeigen.

class SampleJob < ApplicationJob
  queue_as :default

  def perform(*args)
    Sidekiq::Logging.logger.info "-----Ich habe einen Beispieljob ausgeführt.-----"
  end
end

Ich werde so schreiben. Da der äußere Rahmen von Rails g Job erstellt wird, ist jedes Teil eigentlich nur die Sidekiq :: Logging ... -Linie.

Job auf Controller aufrufen

Job auf dem Controller aufrufen.

Ein Protokollausgabeauftrag wird asynchron mit einer Methode namens perform_later ausgeführt.

controller.rb


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

Wenn Sie auf den Indexbildschirm zugreifen und das Sidekiq-Protokoll überprüfen.

2020-06-15T11:30:52.383Z 15 TID-gphk3l13j SampleJob JID-631a85bb82f73f2a07beb772 INFO: ---------Ich habe einen Beispieljob ausgeführt.-------------

Sie können sehen, dass der Job so asynchron ausgeführt wird!

Geben Sie Datum und Uhrzeit der Ausführung an

Sie können auch das Datum und die Uhrzeit für die Ausführung angeben. Mit der set-Methode können Sie den Job am nächsten Tag um 12.00 Uhr ausführen.

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

Das Ende

Das ist alles für die asynchrone Verarbeitung mit Sidekiq, nachdem Sie mit Docker eine Verbindung zu Redis hergestellt haben. Vielen Dank.

** Noch 74 Tage bis zur Vollendung **

Recommended Posts

26. Tag des Ingenieurs, der in 100 Tagen vollwertig sein wird
28. Tag des Ingenieurs, der in 100 Tagen vollwertig sein wird
Neuer Ingenieur, der in 100 Tagen (5. Tag) eine sein wird
Neuer Ingenieur, der in 100 Tagen (6. Tag) eine sein wird
Neuer Ingenieur, der in 100 Tagen (4. Tag) eine sein wird
Neuer Ingenieur, der in 100 Tagen einer sein wird (Tag 0)
Neuer Ingenieur, der in 100 Tagen (3. Tag) eine sein wird
Neuer Ingenieur, der in 100 Tagen (1. Tag) eine sein wird
Neuer Ingenieur, der in 100 Tagen (2. Tag) eine sein wird
《Unerfahren → Webingenieur》 5. Übungstag
《Unerfahren → Webingenieur》 4. Übungstag
Java-Lerntag 4
《Unerfahren → Webingenieur》 2. Übungstag
《Unerfahren → Webingenieur》 3. Übungstag
《Unerfahren → Webingenieur》 1. Übungstag
TECH CAMP (Ingenieur Karrierewechsel) Überprüfung der Lerninhalte in der 6. Woche
TECH CAMP (Ingenieur Karrierewechsel) Rückblick auf das, was in der 4. Woche gelernt wurde