rubyinstaller2:基于MSYS2工具链的Windows Ruby安装程序,支持Ruby-2.4及以上版本

MSYS2 based RubyInstaller for Windows

分支7Tags120
当前项目代码仓暂无内容

CI 构建状态

RubyInstaller2

本项目基于 MSYS2 工具链,为 Windows 系统提供 Ruby-2.4 及更高版本的安装程序。 它是基于 MSYS1 的 RubyInstaller 的继任者,后者用于 Ruby-2.3 及更低版本。 本项目采用 3 条款修改版 BSD 许可证授权。

与旧版 RubyInstaller 不同,它不提供自己的 DevKit,而是利用 MSYS2 项目 中丰富的 MINGW 库。 因此,在目标系统上安装后,它能很好地与 MSYS2 集成,为安装带有 C 扩展的 gems 提供构建和运行时环境。 此变更及其他更多变更记录在 CHANGELOG 中。

在目标系统上使用安装程序

非 Devkit 安装程序文件足以使用纯 Ruby gems 或适用于 x64-mingw-ucrt 或 aarch64-mingw-ucrt 的胖二进制 gems。 为了安装基于 C 的源码 gems,建议使用 Devkit 安装程序版本。 它会在 ruby 目录中安装一个 MSYS2/MINGW 构建环境,其中包含常用的构建工具和库。

某些 gems 需要额外的软件包,这些软件包可以通过 pacman 安装,详见下文。 也可以从 https://msys2.org/ 手动安装 MSYS2,然后运行 ridk install 来添加非默认但必需的开发工具。 有关 Ruby 和 MSYS2 的无人值守安装,请参阅 FAQ chocolatey install

ridk 命令

ridk 是一个 cmd/powershell 脚本,可用于安装 MSYS2 组件、执行 pacman 等 MSYS 命令,或设置环境变量以便从当前 shell 使用 MSYS2 开发工具。

有关更多选项,请参见 ridk help

  Usage:
      C:/Ruby24-x64/bin/ridk.cmd [option]

  Option:
      install                   Install MSYS2 and MINGW dev tools
      exec <command>            Execute a command within MSYS2 context
      enable                    Set environment variables for MSYS2
      disable                   Unset environment variables for MSYS2
      version                   Print RubyInstaller and MSYS2 versions
      use                       Switch to a different ruby version
      help | --help | -? | /?   Display this help and exit

ridk enable 可用于在当前运行的控制台中启用 MSYS2 开发工具。 这使得 shpacmanmake 等命令可在命令行中使用。 有关 ridk 命令的更多说明,请参见维基

安装带有 C 扩展和额外库依赖的 gems

基础 MSYS2 设置包含编译器和其他构建工具,但不包含某些 gems 所需的库或 DLL 作为其依赖项。 幸运的是,许多所需的库都可以通过 MSYS2 仓库获取。 它们可以通过 ridk exec pacman -S mingw-w64-x86_64-libraryname 命令安装,类似于 Linux 上的 apt-get。 对于 32 位 RubyInstaller,请将前缀 mingw-w64-x86_64 替换为 mingw-w64-i686

例如,这些常用的 gems 可以从源码 gem 像这样安装:

  • 要安装 sqlite3 gem:
      ridk exec pacman -S mingw-w64-x86_64-sqlite3
      gem install sqlite3 --platform ruby
    
  • 要安装 nokogiri gem:
      ridk exec pacman -S mingw-w64-x86_64-libxslt
      gem install nokogiri --platform ruby -- --use-system-libraries
    

有些 gems 已正确标记,可以通过 pacman 安装依赖库。 有关如何将此类标记添加到 gems 的信息,请参见维基。 另请参考 FAQ 以获取其他安装建议。

构建安装程序

此仓库提供了用于构建 RubyInstaller 安装程序可执行文件和 7zip 文件的打包任务。 它不编译任何源代码,而是利用 MSYS2-MINGW 仓库RubyInstaller2 pacman 仓库 来下载二进制文件和依赖库。

在 Github Actions 上自动构建

每次推送到 github 仓库时,安装程序都会在 Github Actions 上定期构建。 运行器还会执行安装程序,并在其上运行所有 RubyInstaller 测试和 ruby-spec,以便我们能收到有关破坏性更改的通知。 除此之外,每天还会编译最新的 Ruby 开发快照,并将其打包为 RubyInstaller 文件。 可以从 github releases 下载。 有关如何在 CI 构建中使用 ruby-head 版本,请查看维基

在本地计算机上构建 RubyInstaller2:

  • 确保已安装可用的 RubyInstaller-2.4+ 和 Git
  • 确保已安装 MSYS2,可通过 RubyInstaller-Devkit 版本安装,或使用默认选项执行 ridk install 进行安装
  • http://www.jrsoftware.org/isdl.php 安装最新的 Inno-Setup(unicode 版本)
  • 运行 cmd.exe 并将 iscc.exe 添加到 PATH:
      set PATH=%PATH%;"c:\Program Files (x86)\Inno Setup 6"
    
  • 克隆 RubyInstaller2 并安装依赖项:
      git clone https://github.com/oneclick/rubyinstaller2
      cd rubyinstaller2
      bundle install
      rake -T
    
  • 最后一条命令会列出所有可用的 RubyInstaller 构建目标。 构建目标由以下部分组成:
      rake ri:ruby-3.4.1-x86-msvcrt:archive-7z
            ^      ^      ^    ^        ^- "archive-7z"     => rubyinstaller 文件的 7z 归档
            |      |      |    |           "installer-inno" => 可执行安装程序文件
            |      |      |    '------- "msvcrt" => 旧版 C 标准库
            |      |      |             "ucrt"   => 新版 C 标准库
            |      |      '------- "x86" => 32 位 x86 ruby 和 MSYS2 版本
            |      |               "x64" => 64 位 x86_64 版本
            |      |               "arm" => ARM64 版本
            |      '------ "x.x.x" => 要构建的 ruby 版本
            |              "head"  => ruby 的最新开发快照
            '------ "ri"      => 不带 Devkit 的 RubyInstaller
                    "ri-msys" => 带基于 MSYS2 的 Devkit 的 RubyInstaller
    
  • 将所需的构建目标复制粘贴到命令行。
  • 如果一切顺利,您将在以下位置找到最终的安装程序和归档文件:
    • packages/ri-msys/recipes/installer-inno/rubyinstaller-devkit-<VERSION>-<ARCH>.exe
    • packages/ri/recipes/archive-7z/rubyinstaller-<VERSION>-<ARCH>.7z

已知问题

  • 最好避免安装到包含空格或非 ASCII 字符的 PATH 中。某些 gem 在路径有空格时无法安装,且旧版 ruby 版本(<= 3.0.x)的 ridk 在路径包含特殊字符时甚至根本无法运行。
  • 另请参阅 问题列表

项目介绍

基于MSYS2的Windows系统Ruby安装程序【此简介由AI生成】

定制我的领域