使用Docker/docker-compose运行RoR应用RSpec时Puma启动但用例不执行
问题排查解决步骤
- 修正命令拼写错误:你使用docker-compose执行测试的命令中,将
rspec误写为rsepc,先修正拼写后重新执行测试。 - 检查
entrypoint.sh脚本逻辑:你配置的容器入口脚本如果末尾没有承接后续传入命令的逻辑,会直接忽略你附加的bundle exec rspec指令,执行默认的Puma启动命令。请在entrypoint.sh末尾添加exec "$@",示例完整结构:
#!/bin/sh set -e # 原有入口逻辑(如数据库初始化、缓存清理等) # ... # 新增:执行用户传入的命令 exec "$@"
- 临时覆盖入口脚本验证:如果不想直接修改入口脚本,可以执行命令时添加
--entrypoint=""参数跳过原有入口逻辑,直接执行测试:
# 仅使用Docker执行测试 docker container run --entrypoint="" simpleblogapp bundle exec rspec # 使用docker-compose执行测试 docker-compose run --entrypoint="" -e "RAILS_ENV=test" simpleblogapp bundle exec rspec
- 适配Fedora系统权限限制:Fedora默认开启SELinux会限制容器对宿主机文件的访问权限,你可以临时关闭SELinux验证:
sudo setenforce 0
如果验证后测试可正常执行,可在容器挂载卷配置末尾添加:z标签适配SELinux规则,避免关闭安全组件。
- 检查Rails配置:确认
config/environments/test.rb、config/puma.rb中无强制启动Puma服务的异常配置,本地可正常执行测试基本可排除该问题。
内容的提问来源于stack exchange,提问作者Rafael Viana
相关产品推荐
相关产品推荐

