跳轉到內容

Ruby 程式設計/RubyGems

來自華夏公益教科書,開放的書籍,開放的世界

Rubygems 是 ruby 庫的打包和“下載”系統。使用它通常很簡單,例如

$ gem install xxx

其中 xxx 是您想要安裝的 gem 名稱。

有關 rubygems 的更多資訊,可以在這裡獲得。

如何在安裝 gem 後向終端使用者顯示文字。

[編輯 | 編輯原始碼]
Gem::Specification.new do |s|
 s.post_install_message  = "Enjoy my gem!"
end

或“另一個示例”:http://github.com/tablatom/rubydoctest/blob/master/rubydoctest.gemspec

如何設定 gem 的 rdocs 主頁

[編輯 | 編輯原始碼]
Gem::Specification.new do |s|
  ...
  s.rdoc_options = ["--title", "EventMachine", "--main", "README", "--line-numbers"]
  s.extra_rdoc_files = ["README", "RELEASE_NOTES", "COPYING", "GNU", "LEGAL", "TODO"]
end

或“另一個示例”:http://github.com/eventmachine/evma_httpserver/blob/master/eventmachine_httpserver.gemspec

如何根據安裝者的 ruby 版本安裝不同版本的 gem

[編輯 | 編輯原始碼]

以下是一個示例:建立檔案 ext/mkrf_conf.rb

  require 'rubygems'
  require 'rubygems/command.rb'
  require 'rubygems/dependency_installer.rb' 
  begin
    Gem::Command.build_args = ARGV
    rescue NoMethodError
  end 
  inst = Gem::DependencyInstaller.new
  begin
    if RUBY_VERSION < "1.9"
      inst.install "ruby-debug-base", "~> 0.10.3"
    else
      inst.install "ruby-debug-base19", "~> 0.11.24"
    end
    rescue
      exit(1)
  end 

  f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")   # create dummy rakefile to indicate success
  f.write("task :default\n")
  f.close

http://groups.google.com/group/ruby-talk-google/browse_thread/thread/6a03451af53fb853/5d402de5b0da1adf?lnk=raot&pli=1 有描述

另外,將“@gemspec.extensions = 'ext/mkrf_conf.rb'@”新增到您的 gemspec 中。

如何以程式設計方式安裝 gem

[編輯 | 編輯原始碼]

參見上文。

如何在 extconf.rb 中執行 configure

[編輯 | 編輯原始碼]

以下是一個來自 rice 的 extconf.rb 的示例

require 'rbconfig'
require 'rubygems'
require 'ruby/lib/version.rb'

gem_name = "rice-#{Rice::VERSION}"
prefix_dir = File.join(Gem.default_dir, "gems", gem_name, "ruby", "lib")
with_ruby = File.join(Config::CONFIG["bindir"], Config::CONFIG["RUBY_INSTALL_NAME"])

other_opts = ""
env = ""

if RUBY_PLATFORM =~ /darwin10/
  other_opts = "--disable-dependency-tracking"
  env = "ARCHFLAGS='-arch x86_64'"
end

system "#{env} ./configure --with-ruby=#{with_ruby} --prefix=#{prefix_dir} #{other_opts}"

如何使用 Rakefile 代替 Makefile

[編輯 | 編輯原始碼]

預設情況下,如果您列出

gemspec.extensions = 'ext/extconf.rb'

它將期望已建立了一個 Makefile,並在安裝時對其執行 Make。您也可以列出“@gemspec.extensions = 'ext/mkrf_conf.rb'@”,它將執行它,期望已建立了 Rakefile,並在其上執行 rake。

Rubygems 現在支援外掛,用於新增新的 gem xxx 命令,或在安裝和解除安裝 gem 時執行。

已知的 rubygems 外掛

[編輯 | 編輯原始碼]

以下是外掛列表

gemcutter gem http://github.com/qrush/gemcutter/blob/master/gem/lib/gemcutter.rb 允許您在 gem 準備就緒後將其“推送到” gemcutter

graph gem http://blog.zenspider.com/2009/04/rubygems-now-has-plugins.html 建立本地依賴項的 graphviz 圖

yard gem 有一種方法可以在安裝 gem 後建立 yard 文件(而不是預設的 rdoc)。

gem_file_conflict_checker gem:當您安裝兩個 lib 檔案發生衝突的 gem 時,會向您發出警告(這會導致嚴重問題,並且對於安裝自己版本的 gem 的 gem 開發人員等來說很常見)

isit19 http://blog.segment7.net/articles/2009/08/19/rubygems-isit19-1-0 gem

華夏公益教科書