7.2. RubyGems spec 文件约定


RubyGems spec 文件必须满足以下约定:

  • 文件包含 %{gem_name} 的定义,这是 gem 规格中的名称。
  • 软件包的来源必须是发布的 gem 归档的完整 URL。
  • 软件包的版本必须是 gem 的版本。
  • 该文件包含以下 BuildRequires: 指令:

    BuildRequires: rubygems-devel
    Copy to Clipboard Toggle word wrap

    rubygems-devel 软件包包含构建所需的宏。

  • 该文件不包含任何其他 rubygem (foo) RequiresProvides 指令,因为这些指令是从 gem 元数据自动生成。

7.2.1. RubyGems spec 文件示例

以下是用于构建 gems 的 spec 文件示例部分。spec 文件的其余部分遵循通用准则。

特定于 RubyGems 的示例 spec 文件的一部分

%prep
%setup -q -n  %{gem_name}-%{version}

# Modify the gemspec if necessary
# Also apply patches to code if necessary
%patch 0 -p1

%build
# Create the gem as gem install only works on a gem file
gem build ../%{gem_name}-%{version}.gemspec

# %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir
# by default, so that we can move it into the buildroot in %%install
%gem_install

%install
mkdir -p %{buildroot}%{gem_dir}
cp -a ./%{gem_dir}/* %{buildroot}%{gem_dir}/

# If there were programs installed:
mkdir -p %{buildroot}%{_bindir}
cp -a ./%{_bindir}/* %{buildroot}%{_bindir}

# If there are C extensions, copy them to the extdir.
mkdir -p %{buildroot}%{gem_extdir_mri}
cp -a .%{gem_extdir_mri}/{gem.build_complete,*.so} %{buildroot}%{gem_extdir_mri}/
Copy to Clipboard Toggle word wrap

7.2.2. RubyGems spec 文件指令

以下是在 spec 文件中特定于 RubyGems 的特定项的特定项的具体信息。

Expand
表 7.1. RubyGems 的 spec 指令的具体信息
指令RubyGems 具体信息

%prep

RPM 可以直接解包 gem 归档。%setup -n %{gem_name}-%{version} 宏提供 gem 被解包的目录。在同一目录级别,会自动创建 %{gem_name}-%{version}.gemspec 文件。您可以使用此文件执行以下操作:

  • 修改 .gemspec 文件
  • 将补丁应用到代码。

%build

本节包含将软件构建到机器代码的命令。%gem_install 宏仅在 gem 归档上运行。因此,您必须首先使用 gem build ../%{gem_name}-%{version}.gemspec 命令重新创建存档。然后,%gem_install 使用重新创建的 gem 文件来构建并将 gem 代码安装到默认的 ./%{gem_dir} 临时目录中。在安装之前,构建的源会被放入自动创建的临时目录中。

%install

安装将在 %{buildroot} 层次结构中执行。您可以创建所需的目录,然后将安装的代码从临时目录复制到 %{buildroot} 层次结构中。如果 gem 创建共享对象,它们会被移到特定于架构的 %{gem_extdir_mri} 路径中。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat