转载请注明来源:https://www.cnblogs.com/zhanggui/p/9720818.html

一. 前言

我们可以在rubygems.org中下载安装他人创建的gem。现在,我们尝试一下自己创建一个gem,然后发布,供他人使用。

二. 制作gem

这里开始创建一个zhola的gem,主要作用是输出Hello world。首先创建一个如下tree的文件夹:



创建完成之后,在zhola.rb中填写如下代码:

class Zhola
def self.hi
puts "Hello world!"
end
end

然后设置一下gemspec文件:

Gem::Specification.new do |s|
s.name = 'zhola'
s.version = '0.0.1'
s.date = '2018-09-28'
s.summary = 'Zhanggui first gem'
s.description = '第一次创建gem文件'
s.authors = ["Zhanggui"]
s.email = 'scottzg@126.com'
s.files = ["lib/zhola.rb"]
s.homepage = 'http://rubygems.org/gems/zhola'
s.license = 'MIT'
end

这里的homepage为即将发布到的page。

然后在当前文件夹下执行build命令:

gem build zhola.gemspec

执行成功的结果为:

 Successfully built RubyGem
Name: zhola
Version: 0.0.1
File: zhola-0.0.1.gem

执行成功之后,便会在文件夹中创建zhola-0.0.1.gem文件。此时gem制作成功。

三. 安装创建的gem

在刚刚创建的gem文件目录下执行命令:

gem install ./zhola-0.0.1.gem

输出的结果为:

Successfully installed zhola-0.0.1
Parsing documentation for zhola-0.0.1
Done installing documentation for zhola after 0 seconds
1 gem installed

通过上述命令将刚才创建的gem安装到本机。

四. 查看是否安装成功

打开终端,然后使用irb命令进行测试:

zhola irb --simple-prompt --noecho
>> require "zhola"
>> Zhola.hi
Hello world!
>>

当终端输出Hello world!,说明已经可以正常使用刚才创建的gem。

五. 将gem发布到Rubygems.org

首先,需要注册一个账号,直接在https://rubygems.org/ 注册即可,然后打开终端,在终端输入:

curl -u ***** https://rubygems.org/api/v1/api_key.yaml  # ***** 为你的用户名

紧接着输入密码,回车之后便会得到一个api_key。

接着在gem文件夹中输入下面的指令:

 gem push zhola-0.0.1.gem   # push后面为生成的gem名称

push成功之后终端显示:

Pushing gem to https://rubygems.org...
Successfully registered gem: zhola (0.0.1)

此时说明已经发布到rubygems成功,其他人直接使用:

gem install zhola

即可使用刚才发布的gem。 该gem的homepage为:https://rubygems.org/gems/zhola 。

六. 总结

至此,我们就已经发布了一个gem到rubygems。如果觉得上面的这种方式比较麻烦,需要创建文件夹、创建gemspec等等,也可以直接使用bundle进行创建。这个后面有时间在介绍。

RubyGems系列之创建自己的gem的更多相关文章

  1. Ruby - 创建自己的GEM

    Log 1 创建自己的gem 背景:好奇gem包的用法,首先搞清楚什么是gem包.那我们就先来创建一个自己的gem包. 时间:2014-3-8 环境:Ubuntu + Ruby 1.9.3 记录:Ro ...

  2. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  3. [原创]Devexpress XtraReports 系列 3 创建主从报表

    昨天写了系列的第二篇Devexpress XtraReports 系列 2 创建表格报表 . 今天我们来继续系列 3 创建主从报表 首先我们来看看最后实现的效果.Demo最后附上. 开始吧. 第一步, ...

  4. [原创]Devexpress XtraReports 系列 4 创建多栏报表

    昨天我们完成了 [原创]Devexpress XtraReports 系列 3 创建主从报表 今天我们继续学习新的一种报表模式:多栏报表.(Demo源码,数据库最后附上) 或许很多人会问什么是多栏报表 ...

  5. [原创]Devexpress XtraReports 系列 5 创建交叉报表

    昨天我们已经介绍了如何创建多栏报表,详见:[原创]Devexpress XtraReports 系列 4 创建多栏报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...

  6. [原创]Devexpress XtraReports 系列 6 创建并排报表

    昨天我们已经介绍了如何创建交叉报表,详见:[原创]Devexpress XtraReports 系列 5 创建交叉报表 今天我们继续我们的XtraReports系列.Demo和数据库文件最后会附上. ...

  7. [原创]Devexpress XtraReports 系列 7 创建Drill-Down(向下钻取)报表

    昨天发表了Devexpress XtraReports系列第六篇[原创]Devexpress XtraReports 系列 6 创建并排报表,今天我们继续. 今天的主题是创建Drill-Down报表. ...

  8. [原创]Devexpress XtraReports 系列 8 创建Drill-Through报表

    哎,今天公司工作忙了一天,一直没有时间写写东西.所以只能昨天晚上加班写咯.苦逼啊...... 昨天发表了Devexpress XtraReports系列第七篇[原创]Devexpress XtraRe ...

  9. [原创]Devexpress XtraReports 系列 9 创建邮件合并报表

    昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...

随机推荐

  1. windows一机多装mysql,5.5+版本,8.0.11版本

      00.安装第一个mysql,压缩版或者安装版,过程省略,目录如下: 运行中输入“regedit” 进入后,找到      HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont ...

  2. 'module' object has no attribute 'Thread'解决方法及模块加载顺序

    源码片段: class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Threa ...

  3. Linux 用户及权限详解

    Linux 用户及权限详解 用户 , 组 ,权限 安全上下文(secure context): 权限: r,w,x 文件: r : 可读,可以使用类似cat 等命令查看文件内容. w : 可写,可以编 ...

  4. Unity的Mesh压缩:为什么我的内存没有变化?

    0x00 前言 最近和朋友聊天,谈到了Mesh的内存优化问题,他发现开启Model Importer面板上的Mesh Compression选项之后,内存并没有什么变化.事实上,期望开启Mesh Co ...

  5. 【RL-TCPnet网络教程】第40章 RL-TCPnet之TFTP客户端(精简版)

    第40章      RL-TCPnet之TFTP客户端 本章节为大家讲解RL-TCPnet的TFTP客户端应用,学习本章节前,务必要优先学习第38章的TFTP基础知识.有了这些基础知识之后,再搞本章节 ...

  6. 栈到CLR

    提起栈想必会听到这样几个关键词:后进先出,先进后出,入栈,出栈. 栈这种数据结构,数组完全可以代替其功能. 但是存在即是真理,其目的就是避免暴漏不必要的操作. 如角色一样,不同的情景或者角色拥有不同的 ...

  7. javascript权威指南笔记[1-5]

    1.javaScript的数据类型分为两类:原始类型和对象类型: 2.javaScript中除了数字,字符串,布尔值,null,undefined之外就是对象了: 3.对象(object)是属性(pr ...

  8. openLayers 3知识回顾

    openlayers 知识 前段时间帮助同事重构一个地图类的项目,然后就学习了openLayer3这个框架,但是官网上没有中文版,也没有详细的例子解释,我只能遇到看不懂的就翻译成中文来用,为了方便以后 ...

  9. Python两步实现关联规则Apriori算法,参考机器学习实战,包括频繁项集的构建以及关联规则的挖掘

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  10. 【带着canvas去流浪(7)】绘制水球图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四. 文字淹水效果的实现 五. 关于canvas抗锯齿 六. 小结 示例代码托管在:http://www.github.com/dashnowor ...