我正在尝试创建我的第一个Ruby gem,并在第一个' require'上得到一个LoadError。线。
在我的gem文件夹中,我有3个类,包括' version.rb' (发生LoadError的地方)
version.rb
module OptimalBankroll
VERSION = "0.0.1"
end
numeric.rb(我修改数字类,以便使用的任何整数/浮点数将更改为百分比:
module OptimalBankroll
class Numeric
def to_percentage
self.to_f / 100
end
end
end
bet_size.rb(例如:BetSize.new.amount(1000,1),返回==> 10
module OptimalBankroll
class BetSize
def amount(bankroll, unit)
bankroll.round(2) * unit.round(2).to_percentage
end
end
end
optimal_bankroll.rb(这是我得到LoadError的地方)
require "optimal_bankroll/version"
require "optimal_bankroll/numeric"
require "optimal_bankroll/bet_size"
module OptimalBankroll
end
p OptimalBankroll::BetSize.new.amount(1000, 0.5)
rubygems/core_ext/kernel_require.rb:53:in `require': cannotload such file --
optimal_bankroll/version (LoadError)
我对创建Ruby宝石完全是绿色的,所以任何建议都会有所帮助,谢谢!
答案 0 :(得分:3)
如果传递给require
的字符串不是绝对路径,它只会检查$LOAD_PATH
中指定的目录中的文件。通常,这些文件放在lib/
中,并添加到gemspec中的$LOAD_PATH
。确保你的gemspec中有这些行:
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
那么为了你的工作需要,你需要使用这个文件夹结构:
/
└── lib/
└── optimal_bankroll.rb
└── optimal_bankroll/
└── version.rb
└── numeric.rb
└── bet_size.rb
标准做法是使用上述目录方案,并且应该避免更改$LOAD_PATH
以匹配放置文件的位置而不是相反的位置。
以下是如何使用bundler创建gem的指南。如果您刚刚开始使用宝石开发,您可能会发现它很有帮助。 http://bundler.io/v1.6/rubygems.html