Rails7+Ruby3环境下Github Actions执行RSpec报错求助
Rails 7 + Ruby 3 + RSpec 的 Github Actions 配置示例
以下是经过验证的、适配 Rails 7 + Ruby 3 项目的 Github Actions 配置,专门针对 RSpec 测试场景优化,解决环境加载依赖、数据库初始化等常见问题:
name: RSpec Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest env: RAILS_ENV: test DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test_db RUBY_VERSION: 3.2.2 # 替换为你的项目实际使用的 Ruby 版本 services: postgres: image: postgres:15 # 适配 Rails 7 的推荐 PostgreSQL 版本 env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: test_db ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: ruby-version: ${{ env.RUBY_VERSION }} bundler-cache: true # 自动缓存 Bundler 依赖,加速构建 - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y postgresql-client libpq-dev nodejs npm - name: Install JavaScript dependencies run: npm install # Rails 7 默认用 jsbundling-rails 或 importmap,按需调整 - name: Set up database run: | bundle exec rails db:create bundle exec rails db:schema:load # 用 schema 加载比迁移更快,适合 CI 环境 - name: Precompile assets (按需启用) run: bundle exec rails assets:precompile if: ${{ env.RAILS_ENV == 'test' && exists('app/assets') }} - name: Run RSpec tests run: bundle exec rspec --format documentation
关键配置说明
- 环境变量:明确指定
RAILS_ENV为 test,配置 PostgreSQL 连接地址,避免环境加载歧义 - 数据库服务:启动 PostgreSQL 服务并设置健康检查,确保数据库完全就绪后再执行后续步骤
- 依赖缓存:启用
bundler-cache减少重复安装依赖的时间,同时保证依赖版本一致 - 数据库初始化:用
db:schema:load替代db:migrate,避免迁移历史不一致导致的问题 - 资产预编译:按需启用,若你的测试涉及资产相关逻辑,需保留此步骤
常见问题排查
- 若仍出现环境加载错误,检查项目根目录是否有
.env.test文件,确保关键环境变量已正确配置 - 确认 Gemfile 中包含
pg、rspec-rails等必要依赖,且版本适配 Ruby 3 和 Rails 7 - 检查测试代码中是否依赖本地特定环境变量,需在 Github Actions 的
env块中补充定义
内容的提问来源于stack exchange,提问作者laidofftechworker
相关产品推荐
相关产品推荐

