Oui, c'est le 26e jour au plus tôt. Thème d'aujourd'hui
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
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.
$ 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.
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!
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
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