如何制作gem包
Rails 支持多种形式的拓展,像plugin、gem或者干脆直接将通用工具类代码放置到lib目录下。plugin已经不推荐使用了,目前来看,最好的方式就是写成gem,本文是我学习gem制作整理的笔记,文中以手动添加一个helper方法为例。
第一步:安装 bundler
首先通过 gem list
命令查看如果已经安装了bundler就可以跳过此步。
安装命令:
1
|
|
第二步:使用 bundler 生成一个基础gem结构
1
|
|
执行以后会看到以下输出:
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
Initializating git repo in /home/ivan/private/my_gem
说明:
my_gem.gemspec
文件相当于gem的说明书(specification),其中定义了Gem的内容、作者、描述、主页等信息。将来打包的时候会依赖这个文件。Gem的代码主要放置在
lib
目录下。整个项目加入了Git版本控制。
如果gem本身需要引入其他依赖的包,需要在
.gemspec
文件中指明例如:spec.add_development_dependency "rake"
引入开发依赖spec.add_development_dependency "rails"
引入运行依赖项目中有Gemfile文件,可将其中的 source 替换成淘宝源 “http://ruby.taobao.org”。
另外,在Gemfile有一行内容是”gemspec”,表明该项目依赖的gem包在
.gemspec
文件中指出,这就解释了为什么会有上面第4条。my_gem/lib/my_gem/version.rb 文件中可以填写gem的版本信息。
第三步:编写gem要实现的功能
这里我们实现一个helper方法,在页面输出一段Html代码。
- 新建文件 helper.rb , 路径: lib/my_gem/helper.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
- 引入刚才写的helper
修改 lib/my_gem.rb 文件,首行添加:
1
|
|
- 将helper正真拓展到rails中去
修改 lib/my_gem.rb 文件,尾行添加:
1
|
|
第四步:提交代码
将项目提交到Git仓库,用到的命令:
git add *
git commit -m "finish my gem"
这一步很重要,因为在.gemspec
文件中有这么一行:
1
|
|
它调用了 git ls-files
命令来获取需要打包的文件,而这一命令只会返回Git仓库中的所有的文件,如果我们不提交代码那么项目中新建的文件就不会被打包进来。
第五步:打包
在项目下执行命令 gem build my_gem.gemspec
WARNING: no homepage specified
Successfully built RubyGem
Name: my_gem
Version: 0.0.1
File: my_gem-0.0.1.gem
这里有一个警告,提醒我们填写homepage,这里只是练习不做理会。
第六步:使用
使用方法和其他gem包一样,需要注意的是我们的gem包并没有发布到rubygems.org,所以 gem install 的时候在my_gem-0.0.1.gem 文件所在的目录执行就ok了。
安装:
gem install my_gem-0.0.1.gem
在rails项目的Gemfile中添加
gem "my_gem"
在rails项目下运行命令 ‘bundle’
在erb页面直接调用:
<%= my_helper %>
。