Rails 8 + Kamal 2 配置Solid Queue独立服务器作业遇阻
解决Kamal作业容器找不到Solid Queue表的问题
问题根源
作业容器默认使用了SQLite数据库(而非你的生产数据库),而Solid Queue的表仅存在于生产数据库中,因此启动时提示找不到solid_queue_recurring_tasks表。
修复步骤
补全数据库环境变量
你的deploy.yml仅配置了DB_HOST,缺少生产数据库必需的其他配置项,导致作业容器 fallback 到SQLite。更新env配置,添加完整的数据库连接信息:env: clear: DB_HOST: DB_HOST DB_NAME: myapp_production DB_ADAPTER: postgresql # 替换为你的数据库类型,如mysql2 DB_USER: 你的数据库用户名 secret: - RAILS_MASTER_KEY - DB_PASSWORD # 敏感密码存放在.kamal/secrets中开放作业Droplet的数据库访问权限
在数据库服务器的防火墙/安全组中,允许作业Droplet的IP访问对应的数据库端口(如PostgreSQL用5432,MySQL用3306),确保作业容器能连接到生产数据库。验证数据库迁移状态
确认solid_queue_recurring_tasks表已存在于生产数据库:- 执行
kamal dbc进入数据库控制台 - 运行查询语句:
SELECT * FROM solid_queue_recurring_tasks LIMIT 1;
如果表不存在,执行kamal app exec "bin/rails db:migrate"完成迁移。
- 执行
检查
bin/jobs脚本
确保脚本正确启动Solid Queue Worker,且未覆盖数据库配置,示例脚本如下:#!/usr/bin/env bash exec bundle exec solid_queue start
内容的提问来源于stack exchange,提问作者Thom
相关产品推荐
相关产品推荐

