Kamal 部署 Solid Queue 独立工作节点的实践指南
背景介绍
在现代 Rails 应用开发中,后台任务处理是一个常见需求。Solid Queue 作为 Rails 7.1 引入的默认后台任务解决方案,相比传统的 Active Job 适配器提供了更高效的性能。本文将详细介绍如何通过 Kamal 部署工具来独立部署 Solid Queue 工作节点,而不需要同时运行 Web 应用。
核心挑战
许多开发者在使用 Kamal 部署 Solid Queue 时遇到一个典型问题:Kamal 默认会对部署的容器进行健康检查,这通常需要一个 Web 服务来响应 HTTP 请求。但对于纯后台工作节点来说,运行一个 Web 服务既浪费资源又增加了复杂性。
解决方案
1. 创建专用部署配置
首先,我们需要为工作节点创建独立的部署配置文件 deploy-worker.yml。关键配置如下:
service: app-worker
image: your-registry/app_worker
servers:
web:
hosts:
- your.server.ip
proxy: false # 关键配置,禁用代理和健康检查
builder:
dockerfile: Dockerfile.worker
2. 定制 Dockerfile
为工作节点创建专用的 Dockerfile (Dockerfile.worker):
FROM ruby:3.3.4-slim AS base
WORKDIR /rails
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential libpq-dev
ENV RAILS_ENV="production" \
BUNDLE_DEPLOYMENT="1"
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
USER 1000:1000
CMD ["bin/jobs"] # 直接运行工作进程
3. 优化启动命令
在 bin/jobs 脚本中,我们可以直接启动 Solid Queue 的各个组件:
#!/usr/bin/env ruby
require "solid_queue"
SolidQueue::Manager.start(
dispatchers: { default: { polling_interval: 1 } },
workers: { default: { processes: 2, queues: "*" } }
)
技术原理
Kamal 的健康检查机制默认会验证容器是否能够响应 HTTP 请求。通过将 proxy: false 设置在 web 配置下(而非根级别),我们告诉 Kamal 这个角色不需要进行健康检查。这允许纯后台工作节点顺利部署而不需要运行 Web 服务。
常见问题解决
如果遇到 "target failed to become healthy" 错误,请检查:
- 确保
proxy: false正确设置在web配置段下 - 确认没有其他配置意外启用了健康检查
- 检查工作进程是否能在合理时间内启动完成
性能优化建议
- 资源隔离:将工作节点与 Web 节点部署在不同主机上,避免资源竞争
- 垂直扩展:根据任务负载调整工作进程数量
- 日志管理:配置合理的日志轮转策略,避免磁盘空间耗尽
总结
通过合理配置 Kamal,我们可以实现 Solid Queue 工作节点的独立部署,既简化了架构又提高了资源利用率。这种部署方式特别适合任务密集型应用,能够在不影响 Web 服务的情况下灵活扩展后台处理能力。
对于需要同时部署 Web 和 Worker 的场景,建议采用分离的部署配置和镜像,以获得最佳的运维灵活性和资源利用率。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0212
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0137
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
GLM-5.2智谱开源 GLM-5.2,这是针对长文本任务的最新旗舰模型。相较于前代产品 GLM-5.1,它在长文本任务处理能力上实现了显著飞跃,并且首次在稳定的 100 万 token 上下文中提供这一能力。Jinja00
SwanLab⚡️SwanLab - an open-source, modern-design AI training tracking and visualization tool. Supports Cloud / Self-hosted use. Integrated with PyTorch / Transformers / LLaMA Factory / veRL/ Swift / Ultralytics / MMEngine / Keras etc.Python00
tiny-universe《大模型白盒子构建指南》:一个全手搓的Tiny-UniverseJupyter Notebook03