这是我的可执行文件,名为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中的此可执行文件执行?
答案 0 :(得分:1)
require_relative(string)执行以下操作(强调我的操作):
Ruby尝试加载相对于 要求文件的路径。
由于您尝试使用environment.rb
来请求require_relative './foo'
中的文件,因此它将在与environment.rb
({{1} }我相信)。
答案 1 :(得分:0)
原始问题提供了不同的错误消息。新的错误消息指向相同类型的问题,即同时使用require
和require_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'
。