ruby-on-rails - Action Mailer 和 Sidekiq,电子邮件卡在队列中
问题描述
我正在尝试使用 docker 和 sidekiq 设置我的 rails 应用程序,以便发送电子邮件。这是我的设置:
码头工人-compose.yml
version: '3'
services:
db:
image: postgres
env_file: .env
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails server puma -b 'ssl://0.0.0.0:3000?key=server.key&cert=server.crt'"
env_file: .env
volumes:
- '.:/project'
ports:
- "3000:3000"
links:
- elasticsearch
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- REDIS_URL_SIDEKIQ=redis://redis:6379/1
depends_on:
- db
- redis
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
ports:
- "9200:9200"
environment:
- bootstrap.memory_lock=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "http.host=0.0.0.0"
- "transport.host=127.0.0.1"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
mem_limit: 1g
cap_add:
- IPC_LOCK
volumes:
- /usr/share/elasticsearch/data
redis:
image: 'redis:6.2.0-alpine'
command: redis-server
ports:
- '6379:6379'
volumes:
- 'redis:/data'
sidekiq:
depends_on:
- 'db'
- 'redis'
build: .
command: bundle exec sidekiq -e development -q mailers -q default
volumes:
- '.:/project'
environment:
- REDIS_URL_SIDEKIQ=redis://redis:6379/12
volumes:
redis:
postgres:
Dockerfile
FROM ruby:2.7.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
Sidekq.yml
:concurrency: 1
:queues:
- mailers
应用程序.rb
config.active_job.queue_adapter = :sidekiq
config.action_mailer.deliver_later_queue_name = 'mailers'
Sidekiq.configure_server { |c| c.redis = { url: ENV['REDIS_URL'] } }
正如您从下面的屏幕截图中看到的那样,sidekiq 和其他一切都运行良好。
我还使用 devise 和 devise-async gems 来注册用户并使用 sidekiq 发送异步电子邮件:
gem 'devise'
gem "devise-async"
设计异步.rb
Devise::Async.setup do |config|
config.enabled = true
end
但问题是,当我通过设计过程注册用户时,确认电子邮件永远不会发送。它似乎被困在排队中:
关于如何发送卡在队列中的电子邮件的任何想法?
解决方案
推荐阅读
- python - 在Python中将XYZ坐标转换为经度/纬度
- swift - 从 AWS DynamoDb 快速读取服务器时间
- node.js - 定义哈希编码 SHA256 NodeJS
- python - 你如何添加生命和显示生命的计数器
- java - 由于“tomcatPoolDataSourceMetadataProvider”,Spring boot 2 应用程序启动缓慢
- android - Android 如何使用 androidx.recyclerview.widget.DiffUtil 应用多个过滤器
- mysql - 有没有办法用 django 项目运行 python 脚本?
- python - 有没有办法在 django_rest_framework 中使用 csrf_token 而无需在 django 中使用前端?
- android - 通过 Google Assistant 命令在我的 Android 应用程序中调用 API
- php - file_get_contents("php://input") 将代码放在子文件夹中时返回空