无法找到班级

时间:2014-01-17 15:19:59

标签: ruby sinatra require

我正在使用Windows 7中的Sinatra在Ruby中构建项目。

我的项目结构是:

/project 
  |_ one.rb
  |_ sin.rb

所以,我的代码在one.rb

require 'sinatra'
require 'sin'

但是当我运行它时,控制台会输出:

C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:
36:in `require': cannot load such file -- sin (LoadError)
        from C:/RailsInstaller/Ruby1.9.3/lib/ruby/site_ruby/1.9.1/rubygems/custo
m_require.rb:36:in `require'
        from one.rb:1:in `<main>'

我该如何解决?

3 个答案:

答案 0 :(得分:4)

您必须使用require_relative

require_relative 'sin'

或在$LOAD_PATH中包含当前目录:

$LOAD_PATH << '.'
require 'sin'

答案 1 :(得分:3)

试试require_relative 'sin'。它会工作。阅读Kernel#require_relative

的文档

阅读此帖What is the difference between require_relative and require in Ruby?了解更多信息。

答案 2 :(得分:2)

您也可以将 sin.rb 放入 lib / 文件夹,然后运行:

bundle install

然后:

bundle exec project/one.rb

扩展版

确保您正确制作了 Gemfile .gemspec 。文件模板可以由 bundler 自动生成,如下所示:

bundle gem your_gem_name

然后你创建文件夹 bin / lib / ,将 sin.rb 放入 lib / one.rb 进入 bin / 。并使用正确的值填充 .gemspec 中的所有 TODO

spec.summary       = %q{short summary}
spec.description   = %q{longer description}

然后运行bundle install和exec,如上所述。如果您要生成gem,然后使用gem install进行安装,则无需更改任何内容。