Gem 如何创建一个 Gem 和 Engine

zqalyc · 2013年06月04日 · 最后由 zqalyc 回复于 2013年06月06日 · 6188 次阅读

一:创建 gem

  1. 生成 gem 文件
$ bundle gem a
      create  a/Gemfile
      create  a/Rakefile
      create  a/.gitignore
      create  a/a.gemspec
      create  a/lib/a.rb
      create  a/lib/a/version.rb
Initializating git repo in /Users/camel/a
  1. 编码。

打开 a.gemspec ,这个文件里面都是这个 gem 的一些说明。 找到

s.summary     = %q{TODO: Write a gem summary}
s.description = %q{TODO: Write a gem description}

去掉其中的 TODO,可先改为 (任意写)

s.summary     = %q{"just for test"}
s.description = %q{"just for test"}

lib 是 gem 的工作目录,代码尽量都放到 lib/目录下。 编写a.rb

require "new_gem/version"

module A
  class B
    def self.say(what)
    puts what
    end

  end
end

然后提交到版本库

git@git-virtual-machine:~/a$ git add .
git@git-virtual-machine:~/a$ git commit -am 'commit'

提交成功后生成 gem 包

git@git-virtual-machine:~/a$ gem build a.gemspec
WARNING: no homepage specified
WARNING: description and summary are identical
Successfully built RubyGem
Name: a
Version: 0.0.1
File: a-0.0.1.gem

把 gem 包安装到本地

git@git-virtual-machine:~/a$sudo gem install a-0.0.1.gem -l

测试是否成功

git@git-virtual-machine:~/a$ irb
irb(main):001:0> require 'a'
=> true
irb(main):002:0> A::B.say('hello')
hello
=> nil
irb(main):003:0>quit

如果跟随视频安装报的错误信息是

ERROR:  While executing gem ... (Gem::FilePermissionError)
   You don't have write permissions into the /usr/local/lib/ruby/gems/1.9.1 directory.

要用sudo命令安装

git@git-virtual-machine:~/a$sudo gem install a-0.0.1.gem -l

以上说明创建 gem 已经成功,接下来给 gem 创建另一个功能,即:在控制台调用方法输出

bin目录下创建一个say的普通文件:

require 'a'
A::B.say(ARGV[0])
git@git-virtual-machine:~/a$ git add .
git@git-virtual-machine:~/a$ git commit -am 'create a  file'
git@git-virtual-machine:~/a$ gem build a.gemspec

进入 version.rb 修改 gem 版本

module A
  VERSION = "0.0.2"
end

接下来再次创建和安装新版本的 gem

git@git-virtual-machine:~/a$ gem build a.gemspec 
git@git-virtual-machine:~/a$ sudo install a-0.0.2.gem -l

测试是否成功:

git@git-virtual-machine:~/a$ irb
irb(main):001:0> require 'a'
=> true

成功以后可以再控制台随意输出了

git@git-virtual-machine:~/a$ say hello
hello
git@git-virtual-machine:~/a$ say hehe
hehe

当然你可以把他 push 到 github 上

参考:

二:创建 engine

要创建一个基于 Rails 3.1 的 engine,你需要运行 plugin 创建器并且传递 --full 和 --mountable 给它。要创建初始的“blorgh”engine 你将需要在终端中运行如下命令:

$ rails plugin new blorgh --full --mountable

详见参考:

用 markdown 重新格式化一下主题帖吧。

#1 楼 @lgn21st 嗯。现在先简单记录一下,等写成功了在详细改一下

#2 楼 @zqalyc 我帮你排好了,可以点击编辑看一下我是如何搞的

@Victor 这两个都看不了。pro

#5 楼 @zealinux 月付 56,立刻尊享高端职业玩家的感觉。

#3 楼 @huacnlee 呵呵,谢谢啊

需要 登录 后方可回复, 如果你还没有账号请 注册新账号