制作你自己的gem

制作你自己的gem

对于初学者来说,可能经常会使用gem命令来安装一些Ruby软件包,但是随着能力的提升,你可能不再满足于仅仅编写教科书上的示例程序,你开始尝试编写一些有实际用途的程序,并且你觉得这些程序可能会对其它人有用,这时候你就需要将你的程序打包并发布给其他人,Ruby自带的包管理软件gem可以很好的帮你完成这个任务,本篇指南将通过一个简单的“Hello, gem!”程序来演示如何制作自己的GEM程序包。

首先假设我们的程序目录结构如下:

gem-sample/
  bin/
    gem-sample
  lib/
    gem-sample.rb
  spec/
    gem-sample-spec.rb
  README
  CHANGES
  Rakefile

我们的sample程序很简单,它只是简单的打印一句话:

module GemSample
  def GemSample.run
    puts "Hello, gem!"
  end
end

可执行程序实际上也是一个ruby脚本:

$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
require "gem-sample"
GemSample.run

它读取lib文件夹下的gem-smaple.rb文件,然后调用它的run方法。

现在我们要将这个程序打包成一个gem文件,gempackagetask让我们可以通过Rake来完成打包工作,我们可以这样定义我们的Rakefile:

require 'rubygems'
require 'rake/gempackagetask'
PKG_NAME = "gem-sample"
PKG_VERSION = "1.0.0"
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
PKG_FILES = FileList[
  '[A-Z]*',
  'lib/**/*.rb',
  'spec/**/*.rb',
  'bin/**/*',
]
spec = Gem::Specification.new do |s|
  s.platform = Gem::Platform::RUBY
  s.summary = "Just a sample gem."
  s.name = PKG_NAME
  s.version = PKG_VERSION
  s.requirements << 'none'
  s.require_path = 'lib'
  s.autorequire = 'gem-sample'
  s.executables = ['gem-sample']
  s.default_executable = 'gem-sample'
  s.author = ["sample team"]
  s.email = "sample_team@sample.com"
  s.files = PKG_FILES
  s.description = <<-EOF
    Just a gem sample.
  EOF
end
Rake::GemPackageTask.new(spec) do |pkg|
  pkg.need_zip = true
  pkg.need_tar = true
end

生成gem文件的关键是spec结构,通过它可以控制gem文件的各个属性,大部分属性的含义都可以通过名字来理解,这里就不解释了。

现在我们运行rake -T就可以看到:

rake clobber_package # Remove package products
rake gem # Build the gem file gem-sample-1.0.0.gem
rake package # Build all the packages
rake repackage # Force a rebuild of the package files

执行rake gem,我们会看到根目录下多了一个pkg文件,其中已经包含了我们要发布的gem-sample-1.0.0.gem文件,现在执行:

$ cd pkg
$ gem install --local gem-sample
Successfully installed gem-sample, version 1.0.0

可以看到,我们的gem-sample已经成功安装了,如果你想知道我们到底安装了些什么文件,那么你可以到Ruby的安装目录去看看:

$RUBY_HOME/
  bin/
    gem-sample
    gem-sample.cmd (win32平台)
  lib/
    ruby/
      gems/
        1.8/
          gems/
            gem-sampe-1.0.0/ (我们的文件就在这里了)

你也可以看看gem帮我们生成的两个文件(即bin下的两个文件)到底有些什么东西,实际上很简单。

现在我们可以试着执行我们的程序了,我们可以通过命令行,也可以通过在代码中包含:

$ gem-sample
Hello, Gem!

$ irb
> require “gem-sample”
=> true
> GemSample.run
Hello, Gem!
=> nil

很简单,不是吗?如果你认为你的程序确实很有用,并且你希望它被更多的人知道并使用,那么你可以考虑将你的gem发布到rubyforge(Ruby程序库的大本营)。

最后,如果你不想这个没什么用的垃圾gem占用你的磁盘空间,那么你可以通过下面这条命令来卸载它:

$ gem uninstall gem-sample
Successfully uninstalled gem-sample version 1.0.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值