动态感觉 静观其变

居住地:江西南昌,msn:xlp223(at)hotmail.com,gmail talk:myhat123(at)gmail.com, 欢迎交流。喜欢python,也喜欢rails框架。

逝者如斯
网志分类
· 所有网志
· python学习
· pylons学习
· erlang学习
· ruby学习
· linux
· dotnet
· java
· 其他动态语言
· 感想心得
· ice学习
· 生活琐事
· 其他小玩意
搜索本站
友情链接
· 我们的小歪
· 管理我的Blog
· limodou的学习记录
· ywl51
· 花钱的年华
· python资料
· hd的blog
· oneZ
· hgf
· devin's braindump
· pylons
· sqlalchemy
· michael
· xyb
· kjd
· eiffelqiu
· okpython中国

订阅 RSS

0179125

歪酷博客


« 上一篇: next计划 下一篇: 令人发指 »
Hzg @ 2005-08-27 19:42

建立gem文件

gem spec的说明文件已经建立起来了,它是作为一个ruby的可运行的文件,激活运行它就能生成gem文件了,MomLog-0.5.0.gem
% ruby momlog.gemspec
Attempting to build gem spec 'momlog.gemspec'
Successfully built RubyGem
Name: MomLog
Version: 0.5.0
File: MomLog0.5.0.gem

另外一个创建的方法,是使用gem命令来生成:
% gem build momlog.gemspec

现在你已经有了gem文件了,你可以像其他包一样可以进行分发了。一旦有人获得这个gem文件,就可以安装它了。如果你想把它贡献给ruby社区,最简单的方式是使用RubyForge (http://rubyforge.org).这个站点会每天分几次进行gem打包。一切变得很容易,不需要人工干预。


通过rake来创建gem文件

rake使用一个叫做rakefile的命令文件来控制构建过程。它定义了一组规则(rules)和任务(tasks),它也是使用ruby的语法。
怎样使用rake,请参看:http://rake.rubyforge.org。这里我们只把注意力集中在如何构建gem文件上。从rake的网站上可以知道:
Tasks are the main unit of work in a Rakefile. Tasks have a name (usually given as a symbol or a string), a list of prerequisites (more symbols or strings), and a list of actions (given as a block).
tasks是rakefile中的最主要的工作单元。tasks有一个名字(通常是给定一个symbol或一个字符串),一个先决条件的列表(更多的symbols或字符串),和一个动作列表(给定的一个block)。

你可以在rakefile里使用rake内建的task方法定义你自己的方法,gem的创建就是一个特殊的方法,叫GemPackageTask。这个方法用在gem构建后的处理工作。举个例子:

require 'rubygems'
Gem::manage_gems
require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
 s.name = "MomLog"
 s.version = "0.5.0"
 s.author = "Jo Programmer"
 s.email = "jo@joshost.com"
 s.homepage = "http://www.joshost.com/MomLog"
 s.platform = Gem::Platform::RUBY
 s.summary = "An online Diary for families"
 s.files = FileList["{bin,tests,lib,docs}/**/*"].exclude("rdoc").to_a
 s.require_path = "lib"
 s.autorequire = "momlog"
 s.test_file = "tests/ts_momlog.rb"
 s.has_rdoc = true
 s.extra_rdoc_files = ["README"]
 s.add_dependency("BlueCloth", ">= 0.0.4")
 s.add_dependency("MenuBuilder", ">= 1.0.0")
end
Rake::GemPackageTask.new(spec) do |pkg|
 pkg.need_tar = true
end

注意这里要加载rubygems,同时使用了FileList而不是Dir.glob,Filelist比Dir.glob使用起来更聪明些。自动过滤掉不使用到的文件。比如cvs目录下的一些cvs控制文件。

在内部,GemPackageTask会生成一个带有标识的rake目标。package_directory/gemnamegemversion.
gem。在放置rakefile的同一个目录下,运行rake

% rake pkg/MomLog0.5.0.gem
(in /home/chad/download/gembook/code/MomLog)
Successfully built RubyGem
Name: MomLog
Version: 0.5.0
File: MomLog0.5.0.gem




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定