Хорошо, это мой первый вопрос. Я готов к тому, что чувствую себя глупым, но здесь все.
В настоящее время я изучаю Ruby, прежде чем я познакомлюсь с Ruby on Rails. Я прошел онлайн-курс, и на данном этапе мы только что узнали, как использовать стеллаж для обработки логики сервера и запустить файл config.ru для запуска сервера.
Но каждый раз, когда я пытаюсь запустить сервер с использованием rackup, я получаю LoadError
вот так:
1: from /usr/local/bin/rackup:23:in `<main>'
/usr/local/bin/rackup:23:in `load': cannot load such file -- /usr/lib/ruby/gems/2.5.0/gems/rack-2.0.7/bin/rackup (LoadError)```
Теперь я ударился головой о все возможные углы, которые я могу придумать. Я понимаю, что эта ошибка говорит о том, что путь, по которому команда rackup пытается загрузить код стойки, не существует. Я попытался создать несколько разных файлов .ru, чтобы проверить, не является ли это проблемой с shebang, проблемой с содержимым файла .ru и так далее. Но, похоже, это не так. Я даже не могу запустить пример файла lobster.ru, который входит в комплект поставки стойки. Я получаю ту же ошибку.
Я также попытался переустановить гем стойки, изменив его версию по умолчанию. Ни то, ни другое не помогло. Я подумывал об использовании разных версий Ruby, но это не казалось актуальным. Проблема, очевидно, в том, что рэкап выглядит не в том месте.
Но, если я использую require 'rack'
на простом сервере ruby, проблем не возникнет. Стойка работает. Так что все это говорит мне, что это должно быть связано с самой командой rackup.
Действительно, когда я перехожу на /usr/lib/ruby/gems/2.5.0/gems
, каталог rack-2.0.7
отсутствует. Вместо этого этот каталог находится в var/lib/gems/2.5.0/gems
Я заметил, что var/lib/gems/2.5.0
находится в GEM PATHS среды RubyGems. Но /usr/lib/ruby/gems/2.5.0'
- это не так.
Так что мои идеи по решению проблемы были такими:
Изменить способ загрузки в стойку драгоценного камня. Я посмотрел на это, и это означало бы изменить то, что выглядит как действительно правильный код в rubygems или даже в файлах рэкапа. Я сломаю это, если я буду вмешиваться в это, потому что я понятия не имею, что я делаю. Это не разумный вариант.
Добавьте usr/lib...
в ПУТЬ ДРАГОЦЕННОГО КАМНЯ, чтобы при поиске драгоценностей в стойке он мог его найти. Поискав немного об этой возможности, кажется, что добавлять вещи в GEM PATH вручную не рекомендуется. Я все равно попробовал ... но он не работалЯ могу понять, почему второй вариант, описанный выше, тоже не работает.Простое добавление отсутствующего каталога в GEM PATH или в $ LOAD_PATH не поможет, потому что rackup ищет определенное место для rack, но не может его найти. Если я смотрю на код стойки, он выглядит так:
if Gem.respond_to?(:activate_bin_path)
load Gem.activate_bin_path('rack', 'rackup', version)
else
gem "rack", version
load Gem.bin_path("rack", "rackup", version)
end
Сегменты кода, выполняющие поиск, направляются :activate_bin_path
и bin_path
, которые оба определены в коде rubygems
.
Так что, если я правильно понимаю, это похоже на то, как рэппак получает неправильные указания к месту, которое не существует. Как будто он поворачивает направо, когда должен идти влево. Я могу либо как-то изменить направлениесказать ему «иди налево» или построить то, что он ищет, «справа».
Убедиться, что оно «идет влево» - лучшее решение, но я не могу понять, как это сделать. Поэтому я построил то, что он ищет, направильно ': я скопировал гем стойки в каталог /usr/lib/ruby/gems/2.5.0/gems/
, в котором просматривает rackup. Он решил проблему не найти то, что ищет, - rackup теперь работает и сервер работает. НО это решение будет преследовать меня в будущем, например, если стойка будет обновлена ... Это варварское решение, и я бы предпочел элегантное.
Так что, если у кого-то есть понимание того, как убедиться, что стойка получила правильные указания, пожалуйста, дайте мне знать! Я думаю, что это как-то связано с тем, чтобы убедиться, что рубины bin_path
и :activate_bin_path
соответствуют тому, где драгоценные камни фактически установлены. На данный момент фундаментальное несоответствие заключается в том, что драгоценные камни живут в var
, а выглядят в usr
.
Заранее спасибо!