ruby-on-rails - 将 Resque-Scheduler 与 Docker-Compose 一起使用 - 在 localhost:6379 上连接到 Redis 时出错
问题描述
我正在尝试运行我的 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 作业并看到它们正在运行。
但是,调度程序在手动启动或使用工头(不使用容器)启动时工作正常,所以我希望它也能在这里工作。
解决方案
从我的头顶看到几件事:
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
推荐阅读
- firebase - Flutter & Provider, "类型'列表
' 不是类型 'User' 的子类型" - node.js - fs.renameSync() 在标题中创建一个带有时间戳的 2ed 文件
- javascript - 从 React 中的上一个请求获得响应后,如何发送 fetch 请求?
- python - Brightway2:导入 ecoinvent 3.6 的问题(ecospold 文件)
- javascript - 如何让 npm pack "highcharts-export-server" 等待它完成处理
- javascript - 添加第二个索引时,为什么第一个索引在 javascript 数组中被覆盖?
- c# - 将 UI 元素单击连接到 ViewModel 方法?
- python - 将关键字存储在查询集中,在结果查询集中提供带有 Q 对象的搜索命中以及搜索结果
- c# - 更改 Prism DialogWindow 的所有者
- .net-core - 关于 .net core 中的程序集签名的几个问题