在可执行文件中使用require_relative时出错

时间:2018-12-06 22:01:45

标签: ruby

这是我的可执行文件,名为execute:

#!/usr/bin/env ruby

require_relative '../config/environment.rb'

x = Scraper.new 
Item.clear_all
x.create_entire_menu
x.start

environment.rb看起来像这样:

require 'pry'
require 'nokogiri'
require 'open-uri'

require_relative '../lib/cfaprotein.rb'
require_relative '../lib/item.rb'
require_relative '../lib/scraper.rb'
require_relative '../lib/clifunctions.rb'

environment.rb位于配置中

执行在bin中

cfaprotein.rb在lib中,包含item.rb,scraper.rb和clifunctions.rb

cfaprotein.rb位于顶部:

require "cfaprotein/version"

lib中的其他三项位于顶部:

require_relative './environment.rb'

require 'nokogiri'
require 'open-uri'
require 'pry'

config,lib和bin都位于Development内部的cfaprotein中。

当我输入时:

ruby bin/execute

我得到:

/usr/local/rvm/rubies/ruby- 
2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in 
`require': cannot load such file -- cfaprotein/version (LoadError)
    from /usr/local/rvm/rubies/ruby- 
2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:54:in 
`require'
    from /home/swarbrick85/Development/cfaprotein/lib/cfaprotein.rb:1:in 
`<top (required)>'
    from /home/swarbrick85/Development/cfaprotein/config/environment.rb:5:in 
`require_relative'
    from /home/swarbrick85/Development/cfaprotein/config/environment.rb:5:in 
`<top (required)>'
    from bin/execute:3:in `require_relative'
    from bin/execute:3:in `<main>'

我的代码中有什么不正确并且阻止了bin中的此可执行文件执行?

2 个答案:

答案 0 :(得分:1)

require_relative(string)执行以下操作(强调我的操作):

  

Ruby尝试加载相对于   要求文件的路径

由于您尝试使用environment.rb来请求require_relative './foo'中的文件,因此它将在与environment.rb({{1} }我相信)。

答案 1 :(得分:0)

原始问题提供了不同的错误消息。新的错误消息指向相同类型的问题,即同时使用requirerequire_relative时,您需要了解方法的工作方式以及文件的位置以及如何导航树结构

发布了require_relative的链接,但您还应该查看require(稍微冗长一些)

如果您清除故障,您的错误消息将很清楚:

cannot load such file -- cfaprotein/version
from /home/swarbrick85/Development/cfaprotein/lib/cfaprotein.rb:1

我认为,假设version.rb文件夹配置在某位置(可能是gemspec文件,也许在其他地方),则lib/cfaprotein/version.rb文件将位于lib中。您的$LOAD_PATH

如果version.rb不在lib/cfaprotein文件夹中,请将其移到那里并尝试。

如果它在该文件夹中,但仍然无法使用,请在移动文件后将require更改为require_relative './cfaprotein/version.rb'