⚡️ 设置‑Ruby‑Flash

发布: (2026年1月19日 GMT+8 11:03)
4 min read
原文: Dev.to

Source: Dev.to

概览

一个快速的 GitHub Action,用于通过 rv 安装 Ruby 并使用 ore 管理 gem,以设置 Ruby 环境。

  • ⚡ 在 2 秒内安装 Ruby — 无需编译
  • ⚡ 使用 ore 安装 gem 可提升至 50 % 的速度
  • 🚀 通过 rv 的预构建二进制实现闪电般的 Ruby 安装
  • 📦 使用 ore 快速安装 gem(兼容 Bundler)
  • 💾 对 Ruby 与 gem 实现智能缓存
  • 🔒 通过 ore audit 进行安全审计

支持平台:Linux 与 macOS(x86_64 与 ARM64)——同样适用于 Gitea、Forgejo、Codeberg 和 GitHub Actions。

要求

  • 操作系统:Ubuntu 22.04+,macOS 14+
  • 架构:x86_64,ARM64
  • Ruby 版本:3.2,3.3,4.0

重要

  • 不支持 Windows(请改用 ruby/setup-ruby
  • 不支持 Ruby ≤ 3.1(请改用 ruby/setup-ruby

功能

功能setup‑ruby‑flashruby/setup‑ruby
Ruby 安装时间~5 s → < 2 s~5 s
Gem 安装速度ore(约快 50 %)Bundler
最新稳定版 Ruby
最新 RubyGems
最新 Bundler
Windows 支持
Ruby < 3.2
JRuby(计划)
TruffleRuby(计划)
安全审计(ore)

用法

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'          # 例如 3.4、3.4.1,或使用 "ruby" 获取最新稳定版
    ore-install: true            # 运行 `ore install` 并缓存 gem

其他选项

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ore-install: true
    without-groups: 'development,test'   # 排除 gem 组

当省略 ruby-version 时,action 会从以下文件读取 Ruby 版本:

  • .ruby-version
  • .tool-versions(asdf 格式)
  • mise.toml
输入描述默认
ruby-version要安装的 Ruby 版本(例如 3.43.4.1)。使用 ruby 表示最新稳定版,或省略以从版本文件读取。default
rubygemsRubyGems 版本:defaultlatest 或具体版本(例如 3.5.0)。default
bundlerBundler 版本:Gemfile.lockdefaultlatestnone 或具体版本。Gemfile.lock
ore-install运行 ore install 并缓存 gem。false
working-directory包含版本文件和 Gemfile 的目录。.
cache-version用于失效的缓存版本字符串。v1
rv-version要安装的 rv 版本。latest
ore-version要安装的 ore 版本。latest
skip-extensions跳过构建本机扩展。false
without-groups以逗号分隔的要排除的 gem 组。''
ruby-install-retriesRuby 安装的重试次数(指数退避)。3
token用于 API 调用的 GitHub 令牌。${{ github.token }}

输出

OutputDescription
ruby-version已安装的 Ruby 版本
ruby-prefixRuby 安装路径
rv-version已安装的 rv 版本
rubygems-version已安装的 RubyGems 版本
bundler-version已安装的 Bundler 版本
ore-version已安装的 ore 版本
cache-hit是否从缓存中恢复了 gem

示例工作流

name: CI
on: [push, pull_request]

jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        ruby: ['3.2', '3.3', '3.4']
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v5
      - uses: appraisal-rb/setup-ruby-flash@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          ore-install: true
      - run: bundle exec rake test

高级示例

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ore-install: true
    without-groups: 'development,test'
- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: ruby
    rubygems: latest
    bundler: latest
    ore-install: true
- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    rubygems: '3.5.0'
    ore-install: true
- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ore-install: true
    skip-extensions: true
- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ore-install: true
    working-directory: './my-app'
- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4.1'
    rv-version: '0.4.0'
    ore-version: '0.1.0'
    ore-install: true

如果您遇到由于 GitHub API 速率限制导致的间歇性失败,请增加重试次数:

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ruby-install-retries: '5'

ruby/setup-ruby 的比较

之前(ruby/setup-ruby)

- uses: ruby/setup-ruby@v1
  with:
    ruby-version: '3.4'
    bundler-cache: true
- run: bundle exec rake test

之后(setup-ruby-flash)

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: '3.4'
    ore-install: true
- run: bundle exec rake test

另一个示例:

之前

- uses: ruby/setup-ruby@v1
  with:
    ruby-version: ruby
    rubygems: latest
    bundler: latest

之后

- uses: appraisal-rb/setup-ruby-flash@v1
  with:
    ruby-version: ruby
    rubygems: latest
    bundler: latest

致谢

  • setup-ruby – 长期存在的参考实现。
  • rv – 由 Spinel Cooperative 创建。
  • ore – 由 Contriboss 创建。

我是一名全职 FLOSS 维护者。如果您觉得我的工作有价值,请考虑成为赞助者——每一美元都很有帮助!

支持

🥰 支持 FLOSS 工作 🥰
获取 Galtzo FLOSS Discord 上的 “Sponsors” 频道的访问权限。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...