Ruby on rails 使用带有Docker Compose的Resque调度程序-连接到本地主机上的Redis时出错:6379

Ruby on rails 使用带有Docker Compose的Resque调度程序-连接到本地主机上的Redis时出错:6379,ruby-on-rails,docker,redis,docker-compose,resque-scheduler,Ruby On Rails,Docker,Redis,Docker Compose,Resque Scheduler,我正在尝试运行我的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 | Ori

我正在尝试运行我的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
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
我的Docker Compose YML看起来像:

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
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
my 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作业并看到它们正在运行


但是,当手动或由foreman(不使用容器)启动时,调度程序工作正常。因此,我希望在这里也能让它工作。

从我的头脑中可以看到一些事情:

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

最后从这个答案中得到了一个线索:

似乎我需要在设置任务和初始值设定项中设置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

问题可能是
Procfile
,因为它在所有工作人员启动的文件中被调用,
$REDIS\u URL
是完整的URL还是主机名?您将其拼写为URL语法,然后在代码中将其作为主机名传递。@7urkm3n您认为呢mean@DavidMaze错配的好球。我已经更改了它(并更新了问题),但是在本地主机上连接Redis时出现
错误:6379
。您能解释一下您在这里更改的内容以及原因吗?我尝试添加链接部分,但遇到了同样的问题。