我构建了一个名为 prawn_charts 的 gem,并且可以在 irb 中使用以下命令成功地要求包装所有类(这些类都在不同的文件中)和项目根目录中的类的模块:
require "./lib/prawn_charts.rb"
但是,当我使用 and 创建 gem 时$ rake build
,$ rake install
cd 到我的主目录,并在 irb 中需要 gem,我只能加载包装模块而不是任何单个类:
~ $ irb
>> require 'prawn_charts'
=> true
>> PrawnCharts # this works
=> PrawnCharts
>> PrawnCharts::YLabelsDataCollector # don't know why this causes an error
NameError: uninitialized constant PrawnCharts::YLabelsDataCollector
这是lib/prawn_charts.rb
文件的样子:
require 'prawn'
require_relative "./prawn_charts/version"
module PrawnCharts
end
# this loads PrawnCharts::YLabelsDataCollector
Dir["./lib/data_collectors/**/*.rb"].each {|file| require file }
Dir["./lib/renderers/**/*.rb"].each {|file| require file }
我在 gemspec 文件中也有这一行:
gem.files = `git ls-files`.split($/)
编辑:
这是我应该拥有的lib/prawn_charts.rb
:
lib_path = File.expand_path(File.dirname(__FILE__))
Dir["#{lib_path}/prawn_charts/data_collectors/**/*.rb"].each {|file| require file }
Dir["#{lib_path}/prawn_charts/renderers/**/*.rb"].each {|file| require file }