创建自己的ruby语言gem包
开发环境:ubuntu 12.04; Ruby 2.1.2
创建 gem 文件
richard@richard:~/gemtest$ bundle gem mygem create mygem/Gemfile create mygem/Rakefile create mygem/LICENSE.txt create mygem/README.md create mygem/.gitignore create mygem/mygem.gemspec create mygem/lib/mygem.rb create mygem/lib/mygem/version.rb Initializing git repo in /home/richard/gemtest/mygem
结构如下:
richard@richard:~/gemtest/mygem$ tree . ├── Gemfile ├── lib │ ├── mygem │ │ └── version.rb │ └── mygem.rb ├── LICENSE.txt ├── mygem.gemspec ├── Rakefile └── README.md 2 directories, 7 files
编码
打开 mygem.gemspec ,这个文件里面都是这个 gem 的一些说明。 找到
spec.summary = %q{TODO: Write a gem summary}
spec.description = %q{TODO: Write a gem description}
去掉其中的TODO,可先改为(任意写)
spec.summary = %q{"just for test"} spec.description = %q{"just for test"}
lib是gem的工作目录,代码尽量都放到lib/目录下。 然后我们在mygem文件夹下建立gemtest.rb和mtest.rb文件。 gemtest.rb内容如下:声明了一个类和方法
class Gemtest def initialize(name,address) @name=name @address=address end def speak puts "#{@name} speak me: I am address #{@address}." end end
mtest.rb内容如下: 声明了一个模块和方法
module Mtest def speak puts "module test" end end
lib的根目录下有一个mygem.rb文件,这个文件用来引入你在lib/mygem文件夹下建的所有rb文件。 mygem.rb 文件的内容为
require "mygem/version" require 'mygem/gemtest' require 'mygem/mtest'
打开 mygem.gemspec ,找到
spec.files = `git ls-files -z`.split("\x0")
把新加的文件添加进去,不然会找不到文件,在调用gem的时候报错
方法一
,把所有要用的文件加入这个数组
spec.files = ["lib/mygem.rb","lib/mygem/gemtest.rb","lib/mygem/mtest.rb","lib/mygem/version.rb"]
方法二
,不改动gemspec文件中的配置,把新增的文件添加到git 中:
richard@richard:~/gemtest/mygem$ git add lib
虽然add之后没有commit,也不知道文件添加到什么地放,但是经过测试,是可以识别到文件的。
richard@richard:~/gemtest/mygem$ git ls-files .gitignore Gemfile LICENSE.txt README.md Rakefile lib/mygem.rb lib/mygem/gemtest.rb lib/mygem/mtest.rb lib/mygem/version.rb mygem.gemspec richard@richard:~/gemtest/mygem$
打包 gem 文件
mygem/version.rb文件是描述当前版本的。如过升级了你的gem,打包之前,确认版本号是否需要变动。
在项目根目录下,即mygem目录下运行命令:
richard@richard:~/gemtest/mygem$ rake build
mygem 0.0.1 built to pkg/mygem-0.0.1.gem.
会在pkg文件夹下生产gem安装包mygem-0.0.1.gem. 或者使用 gem build mygem.gemspec 会直接在跟目录里生成 mygem-0.0.1.gem.
安装gem 包
安装到本地 加上 --local 运行命令:
richard@richard:~/gemtest/mygem$ gem install pkg/mygem-0.0.1.gem --local Successfully installed mygem-0.0.1 Parsing documentation for mygem-0.0.1 Done installing documentation for mygem after 0 seconds 1 gem installed
测试是否成功
richard@richard:~/gemtest/mygem$ irb 2.1.2 :001 > require 'mygem' => true 2.1.2 :002 > a=Gemtest.new("aa","bb") => #<Gemtest:0x0000000224ec10 @name="aa", @address="bb"> 2.1.2 :003 > a.speak aa speak me: I am address bb. => nil 2.1.2 :004 > include Mtest => Object 2.1.2 :005 > speak module test => nil 2.1.2 :006 > quit
ok成功