2

我正在尝试运行我的 rails 应用程序 resque 和 redis。使用工头等我的设置工作正常,但是当我尝试使用 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

我的配置/初始化程序/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 作业并看到它们正在运行。

但是,调度程序在手动启动或使用工头(不使用容器)启动时工作正常,所以我希望它也能在这里工作。

4

2 回答 2

0

从我的头顶看到几件事:

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 --> try better redis://cache
    links:
      - redis
  redis:
    image: redis:5.0.5-alpine
于 2019-09-10T00:05:54.977 回答
0

最后从这个答案中得到了一个线索:Docker-compose - Redis at 0.0.0.0 而不是 127.0.0.1

看来我需要在设置任务和初始化程序中设置我的 Resque redis 连接。将 Resque.redis = Redis.current 添加到我的 resque.rake 设置任务中终于让它全部工作了:

require "resque/tasks"
require "resque/scheduler/tasks"

task "resque:preload" => :environment
namespace :resque do
  task :setup do
    require "resque"

    Resque.redis = Redis.current
  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
于 2019-09-12T10:37:26.393 回答