介绍
共享形成了每个人之间的桥梁,它使事情成长。 这是开源运动的基础,它让位,并允许这么多伟大的事情发生,特别是在最近几年。
此主体适用于基于Ruby和Ruby的应用程序。 这就是为什么 - 以及如何 - 开发人员可以开始工作,使他们的想法成为如此之快,由于所有可用的工具,库和框架,他们可以利用的想法。
在这篇DigitalOcean文章中,我们旨在帮助那些试图通过分享自己的基于Ruby或Ruby的创作来回馈社区的人们。 我们将为包装代码的谜题揭开一些光芒,以便其他人能够使用RubyGems包管理器轻松地将其下载为Gem,这使得整个过程变得轻而易举。
词汇表
1.包装应用
2. RubyGems包管理器和Ruby Gem包
- RubyGems软件包管理器
- RubyGem包
- Gem包装结构
获得Ruby和必要的工具
- 安装Ruby
- 安装Bundler
3.包装一个Ruby应用程序
- 准备分发目录
- 创建.gemspec文件
- 放置应用程序代码
- 修改主应用程序脚本
- 确保一切工作
- 列出您的Gem的依赖关系
- 提交Gem包
4.发布一个Gem包
- 创建包
- 出版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
[package_name]:
Gem包的主根目录。/ bin:
如果包有任何可执行二进制文件的位置。/ lib:
包含主要Ruby应用程序代码(包含模块)的目录。/测试:
测试文件的位置。Rakefile:
使用Rake构建的库的Rake文件。[packagename] .gemspec:
* .gemspec文件,其具有主目录的名称,包含所有包元数据,例如名称,版本,目录等。
获得Ruby和必要的工具
安装Ruby
如果您没有安装Ruby,您可以按照下面的两个链接之一,使其正确设置在您选择的平台上。
CentOS / Rhel:
如何在CentOS 6.5上安装Ruby 2.1.0使用RVMUbuntu / Debian:
如何安装Ruby 2.1.0在Ubuntu 13使用RVM
安装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]