如何打包和分发Ruby应用程序作为Gem用的RubyGems

在本教程中,我们将与理解RubyGems的,创业板封装格式开始,然后学习如何从开始打包Ruby应用程序到结束,与创建包的结构包含代码(和其他相关材料)开始。

介绍


共享形成了每个人之间的桥梁,它使事情成长。 这是开源运动的基础,它让位,并允许这么多伟大的事情发生,特别是在最近几年。

此主体适用于基于Ruby和Ruby的应用程序。 这就是为什么 - 以及如何 - 开发人员可以开始工作,使他们的想法成为如此之快,由于所有可用的工具,库和框架,他们可以利用的想法。

在这篇DigitalOcean文章中,我们旨在帮助那些试图通过分享自己的基于Ruby或Ruby的创作来回馈社区的人们。 我们将为包装代码的谜题揭开一些光芒,以便其他人能够使用RubyGems包管理器轻松地将其下载为Gem,这使得整个过程变得轻而易举。

词汇表


1.包装应用


2. RubyGems包管理器和Ruby Gem包


  1. RubyGems软件包管理器
  2. RubyGem包
  3. Gem包装结构

获得Ruby和必要的工具


  1. 安装Ruby
  2. 安装Bundler

3.包装一个Ruby应用程序


  1. 准备分发目录
  2. 创建.gemspec文件
  3. 放置应用程序代码
  4. 修改主应用程序脚本
  5. 确保一切工作
  6. 列出您的Gem的依赖关系
  7. 提交Gem包

4.发布一个Gem包


  1. 创建包
  2. 出版Gem

包装应用


其中一个分发应用程序,库或其他编程相关的代码包的方法是把它们放在档案称为 应用程序包包含已编译和即用的软件,易于保持轨道和易于使用的方式。 它们通常带有包含有关软件包以及有时文档的信息的附加文件。

因此,包装应用程序包括以下由包管理工具(即RubyGems)定义的设置格式,并使用这些工具以容易访问的方式与其他人共享它们。

在本教程中,我们将首先了解RubyGems(Gem包格式),然后了解如何从头到尾地打包Ruby应用程序,从创建包含结构以包含代码(和其他相关材料)开始。

RubyGems包管理器和Ruby Gem包


注:本文的主题是打包的应用程序。 本节包含相关工具和材料的摘要。 为了更多地了解他们,你可以阅读介绍第一部分我们RubyGems的系列。

RubyGems软件包管理器


RubyGems是Ruby的默认的包管理器 它有助于所有应用程序包生命周期从下载到分发Ruby应用程序和相关的二进制文件或库。 RubyGems是一个功能强大的软件包管理工具,它提供了开发人员在打包应用程序档案的标准化结构,称为RubyGem

RubyGem包


Gem是一个Ruby应用程序包,可以包含从代码集合到库的任何内容,和/或打包代码实际需要运行的依赖关系列表。

Gem包装结构


Gem包包含不同的组件集。 每个组件都放置在gem包内的专用位置。

所有以下元素(和更多)可以进入Gem:

  • 应用代码;

  • 测试;

  • 描述依赖关系;

  • 二叉;

  • 相关文件;

  • 关于包的信息(gemspec)。

Gem由类似于以下的结构形成:

/[package_name]               # 1
        |__ /bin              # 2
        |__ /lib              # 3
        |__ /test             # 4
        |__ README            # 5
        |__ Rakefile          # 6
        |__ [name].gemspec    # 7
  1. [package_name]:

    Gem包的主根目录。

  2. / bin:

    如果包有任何可执行二进制文件的位置。

  3. / lib:

    包含主要Ruby应用程序代码(包含模块)的目录。

  4. /测试:

    测试文件的位置。

  5. Rakefile:

    使用Rake构建的库的Rake文件。

  6. [packagename] .gemspec:

    * .gemspec文件,其具有主目录的名称,包含所有包元数据,例如名称,版本,目录等。

获得Ruby和必要的工具


安装Ruby


如果您没有安装Ruby,您可以按照下面的两个链接之一,使其正确设置在您选择的平台上。

安装Bundler


其中之一,我们将使用创造Gem的工具是捆扎机 一旦Ruby和RubyGems的这样你的系统上安装,你可以使用' gem命令来获取打捆

运行以下命令以安装bundler使用gem

gem install bundler

# Successfully installed bundler-1.5.3
# Parsing documentation for bundler-1.5.3
# Done installing documentation for bundler after 3 seconds
# 1 gem installed

包装一个Ruby应用程序


有几种方法可以开始创建Gem包。 一种方法是使用流行的Bundler,一个Ruby环境和依赖管理器,它帮助应用程序的需求和代码的维护。 此工具还可用于构建Gem分发目录以启动打包过程。

准备分发目录


Gem包保存在包目录中,应该按照我们在前面的结构化部分中讨论的包来命名。 由于这些是在文件系统上找到简单的位置,你可以使用Unix mkdir命令,一个创建逐一......或让捆扎机来完成这项工作。

运行以下命令以支持文件夹中的所有必需的目录,以Gem的所需名称命名:

# Usage: [sudo] bundle gem [your chosen gem name]
# Example:
bundle gem my_gem

注:Gem名称必须是唯一的。 因此,您应该搜索并确保您希望用于您的Gem的名称尚未由其他人的项目选择。 为了验证,您可以访问和搜索RubyGems.org

上面的命令将运行一系列命令来创建我们的包结构,例如:

# bundle gem my_gem
#       create  my_gem/Gemfile
#       create  my_gem/Rakefile
#       create  my_gem/LICENSE.txt
#       create  my_gem/README.md
#       create  my_gem/.gitignore
#       create  my_gem/my_gem.gemspec
#       create  my_gem/lib/my_gem.rb
#       create  my_gem/lib/my_gem/version.rb
# Initializing git repo in .../my_gem

你会看到,Bundler还创建了一个全新的Git存储库,它配备了各种版本控制操作。

注:如果您想了解更多有关如何使用Git工作,检查出DigitalOcean社区文章的主题。

创建.gemspec文件


.gemspec文件包含有关Gem包一些绝对的重要信息。 Ever Gem必须附带一个元数据,从Gem名称到版本和描述到Gem包含的文件夹。

提示: .gemspec文件是常规的Ruby脚本-这意味着它们是可编程的。

要查看捆扎机创建的一般gemspec的内容,请使用以下命令:

cat my_gem/my_gem.gemspec

# # coding: utf-8
# lib = File.expand_path('../lib', __FILE__)
# $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
# require 'my_gem/version'

# Gem::Specification.new do |spec|
#   spec.name          = "my_gem"
#   spec.version       = MyGem::VERSION
#   spec.authors       = ["Maintainer Name"]
#   spec.email         = ["maintainer@email.address"]
#   spec.summary       = %q{TODO: Write a short summary. Required.}"
#   spec.description   = %q{TODO: Write a longer description. Optional.}
#   spec.homepage      = ""
#   spec.license       = "MIT"

#   spec.files         = `git ls-files -z`.split("\x0")
#   spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
#   spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
#   spec.require_paths = ["lib"]

#   spec.add_development_dependency "bundler", "~> 1.5"
#   spec.add_development_dependency "rake"
# end
# mba:Git

您可以立即编辑此文件,或在每次打包和发布之前。

为了修改这个文件,可以使用下面的命令利用纳米对其进行编辑:

nano my_gem/my_gem.gemspec

这将打开纳米文本编辑器。

您可能要在此声明的建议的其他信息之一是运行代码所需的最低Ruby解释器版本。

你可以用做required_ruby_version声明,它可以对一致性的文件的底端添加。

例如:

# ..

  # Declare that the Gem is compatible with
  # version 2.0 or greater
  spec.required_ruby_version = ">= 2.0"

  spec.add_development_dependency "bundler", "~> 1.5"
  spec.add_development_dependency "rake"
end

完成文件编辑后,按CTRL + X,然后按Y确认保存并退出。

注意:不要忘了修改包含一个“待办事项”占位符(即声明%q{TODO:spec.description

放置应用程序代码


您的库(或应用程序,框架等)应经常去里面/lib的目录。 在这个目录中,应该有一个Ruby脚本,命名方式与您的Gem完全相同。 当另一个应用程序依赖于您的Gem时,此文件是导入的主文件。

把你的应用程序代码的建议和整洁的方法是把它分成位,将它们放置在一个目录,里面的/lib ,他们的使用和提供由my_gem.rb向公众开放。

当你看的内容/lib的目录,你会看到,主要的Ruby脚本,并包含你的代码目录已准备就绪:

ls -l my_gem/lib

# drwxr-xr-x  3 user  staff  102 dd Mmm hh:mm my_gem
# -rw-r--r--  1 user  staff   70 dd Mmm hh:mm my_gem.rb

my_gem内的目录/lib带有一个版本的文件:

cat my_gem/lib/my_gem/version.rb

module MyGem
  VERSION = "0.0.1"
end

VERSION号设置为自动导入和内部使用*.gemspec由捆扎机文件。 您可以在这里修改它,并更改它,以匹配您Gem的当前版本。

您应该将所有代码移动到您的应用程序使用。

作为一个例子,让我们创建一个Hello [name]!模块。

nano my_gem/lib/my_gem/hail.rb

将下面的例子放在里面:

class Hail
  def self.name(n = "Dalek")
    n
  end
end

按CTRL + X,并用Y确认保存并退出。

修改主应用程序脚本


在上一步中,我们已经了解到,为了藏在心里的宗旨,以尤其是很多类的应用程序应该分开与位于里面的所有元素片/lib/[gem-name]目录。

让我们看看我们如何修改当某人使用你的Gem时导入的主要Ruby脚本。

运行以下命令来编辑导入的Ruby文件中/lib使用纳米:

# Usage: [sudo] nano my_gem/lib/[gem name].rb
nano my_gem/lib/my_gem.rb

你会看到一个非常简短的脚本,类似下面的:

require "my_gem/version"

module MyGem
  # Your code goes here...
end

在这里,你应该导入所有的类和代码与/lib/[gem name]目录,并使用它们。

在我们的例子,让我们来看看如何使用Hail这是我们在上一步中创建的类。

修改代码类似于下面的示例:

require "my_gem/version"
require "my_gem/hail"

module MyGem
  def self.hi(n = "Default Name")
    hail = Hail
    Hail.name(n)
  end
end

按CTRL + X,并用Y确认保存并退出。

注:虽然没有必要使Hail实例化类,用于演示的目的,我们已经取得了这么离开MyGem作为一个模块直接使用它的方法。

确保一切工作


一旦你移动你的代码里面和修改主要导入的脚本,你会想要确保一切正常,自然。 到去这样做最简单的方法就是再次使用捆扎机 -通过安装Gem,而不是。

首先,让我们进入Gem目录,然后使用Bundler的控制台功能:

cd my_gem
bundler console

这将使用来自信息加载Gem*.gemspec ,让你得到工作,例如:

bundler console

# irb(main):001:0> MyGem.hi("Hello world!")
# => "Hello world!"

列出您的Gem的依赖关系


在现实世界的情况下,很可能你的Gem本身将依赖于他人。

这些依赖关系也列在*.gemspec文件。

运行以下命令以使用nano编辑文件:

nano my_gem/my_gem.gemspec

在适当的块中添加以下指令以列出依赖关系:

# Usage: spec.add_runtime_dependency "[gem name]", [[version]]
spec.add_runtime_dependency "activesupport", [">= 4.0"]

按CTRL + X,并用Y确认保存并退出。

注意:您可以通过重复相继上的指示列出所有必要的依赖*.gemspec文件。

提交Gem包


一旦你的Gem准备发货,你应该提交Git仓库进行版本控制。

使用以下命令使用Git提交:

git commit -m "Version 0.1.0" 

Git然后,将提交所有的代码,并给你的结果:

# [master (root-commit) d4640b8] Version 0.1.0
#  8 files changed, 104 insertions(+)
#  create mode 100644 .gitignore
#  create mode 100644 Gemfile
#  create mode 100644 LICENSE.txt
#  create mode 100644 README.md
#  create mode 100644 Rakefile
#  create mode 100644 lib/my_gem.rb
#  create mode 100644 lib/my_gem/version.rb
#  create mode 100644 my_gem.gemspec

发布Gem包


一旦你对你的Gem感到满意,你就可以在RubyGems.org上把它发布到世界上。

注:为了释放你的代码,你将需要在一个帐户https://rubygems.org/sign_up

创建包


一旦所有设置,您可以创建使用包gem工具。

运行以下命令以创建包:

# Usage: [sudo] gem build [gem name].gemspec
# Example:
gem build mygem.gemspec

# Successfully built RubyGem
# Name: my_gem
# Version: 0.1.0
# File: my_gem-0.1.0.gem

出版Gem


有几种方式发布新铸造的Gem。 无论哪种方式,您都需要使用RubyGems.org帐户登录,所以让我们先开始。

运行以下命令登录,使用gem

gem push

输入您的电子邮件地址,然后输入您的密码以登录。

注意:我们专门从给人一种Gem的名字来推动,这样我们只登录无需进行进一步的行动。

为了简单地推送你的Gem,运行以下:

# Usage: [sudo] gem push [gem file]
# Example:
gem push my_gem-0.1.0.gem

或者,您可以从Bundler的Rake任务中受益。 您可以查看包含以下内容的完整列表:

rake -T
  • 耙式构建:

    将my_gem-0.0.1.gem构建到pkg目录中

  • rake安装:

    构建并安装my_gem-0.0.1.gem到系统Gem

  • 耙式释放:

    创建标签v0.0.1并构建和推送my_gem-0.0.1.gem到Rubygems

如果调用rake release ,你的包将被推到您所设置的Git帐户,然后到RubyGems.org,例如:

rake build
# my_gem 0.1.0 built to pkg/my_gem-0.1.0.gem.

rake release

# rake aborted!
# Couldn't git push. `git push  2>&1' failed with the following output:

# fatal: No configured push destination.
# Either specify the URL from the command-line or configure a remote repository using

#     git remote add <name> <url>

要继续,请添加一个远程Git帐户:

# Usage: git remote add origin git@github.com:[user name]/[repository].git
# Example:
git remote add origin git@github.com:maintainer1/my_gem.git

然后同时放使用释放你的代码rake

rake release

# ..
# Pushed MyGem

就这样! 你现在可以去RubyGems.org并检查你的Gem:

http://www.rubygems.org/gems/[your gem name]
:提交OS Tezer