Rails アプリ、resque、redis を実行しようとしています。foreman などを使用すると、セットアップは正常に機能しますが、docker-compose を使用して Docker で実行しようとすると、次のようになります。
app_1 | 21:03:13 resque.1 | Redis::CannotConnectError: Error connecting to Redis on redis://redis:6379 (SocketError)
app_1 | 21:03:13 resque.1 | Original Exception (Redis::CannotConnectError): Error connecting to Redis on redis://redis:6379 (SocketError)
私の Dockerfile は次のようになります。
FROM ruby:2.6.3-alpine
RUN apk update && apk add bash build-base libxml2-dev libxslt-dev postgresql postgresql-dev
VOLUME ["/code"]
WORKDIR /code
私の Docker Compose YML は次のようになります。
version: '3'
services:
app:
build: .
command:
- /bin/bash
- -c
- |
bundle check || bundle install
bundle exec rake db:migrate; rake db:seed
bundle exec foreman start
volumes:
- ./:/code
ports:
- "5000:5000"
depends_on:
- redis
environment:
REDIS_URL: redis://redis/5
redis:
image: redis:5.0.5-alpine
私のプロセスファイル:
web: bundle exec puma -C config/puma.rb
resque: bundle exec rake resque:work QUEUE=*
scheduler: bundle exec rake resque:scheduler
私のconfig/initializers/resque.rb
redis_url = ENV["REDIS_URL"] || "redis://localhost:6379"
Redis.current = Redis.new(url: redis_url)
Resque.redis = Redis.current
そして私の lib/tasks/resque.rake
require "resque/tasks"
require "resque/scheduler/tasks"
task "resque:preload" => :environment
namespace :resque do
task :setup do
require "resque"
end
task setup_schedule: :setup do
require "resque-scheduler"
Resque.schedule = YAML.load_file(Rails.root.join("config","schedule.yml"))
end
task scheduler: :setup_schedule
end
アップデート
問題は、特に Resque-Scheduler にあるようです。procfile からそれを削除すると、Docker-Compose でアプリを正常に起動でき、resque ジョブの実行とそれらの実行を確認できます。
ただし、手動またはフォアマン (コンテナーを使用しない) で開始すると、スケジューラーは正常に動作するため、ここでも動作させることができるようにしたいと考えています。