创建Ruby gem //'require'错误:无法加载此类文件(LoadError)

时间:2014-08-06 19:41:10

标签: ruby module rubygems require

我正在尝试创建我的第一个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宝石完全是绿色的,所以任何建议都会有所帮助,谢谢!

1 个答案:

答案 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