Ошибка при использовании require_relative в исполняемом файле - PullRequest
0 голосов
/ 07 декабря 2018

Это мой исполняемый файл с именем 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 находится в конфигурации

executeнаходится в 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 находятся в 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 голосов
/ 07 декабря 2018

Исходный вопрос содержит другое сообщение об ошибке.Новое сообщение об ошибке указывает на проблему того же типа, которая заключается в том, что при использовании require и require_relative вам необходимо понять, как работают методы и где находятся ваши файлы и как перемещаться по древовидной структуре.

Ссылка для require_relative опубликована, но вы также должны взглянуть на require (что немного более многословно)

Ваше сообщение об ошибке будет довольно ясным, если вы отсеете это:

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

Я полагаю, что этот файл version.rb будет находиться в lib/cfaprotein/version.rb, предполагая, что папка lib где-то настроена (может быть, в файле gemspec, может быть, где-то еще)в вашем $LOAD_PATH

Если version.rb не находится в папке lib/cfaprotein, переместите его туда и попробуйте.

Если он находится в этой папке и все еще неработать, измените требование на require_relative './cfaprotein/version.rb' после перемещения файла.

0 голосов
/ 07 декабря 2018

require_relative (строка) выполняет следующее (выделение мое):

Ruby пытается загрузить библиотеку с именем string относительно , требующего путь к файлу .

Поскольку вы пытаетесь запросить файлы из environment.rb, используя require_relative './foo', они ищут те файлы в том же каталоге , что и environment.rb (config Iверить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...