В rails 5.2 у меня есть небольшая библиотека который находится в app / lib / itunes (все, что находится в app / lib, должно быть загружено автоматически?). Тем не менее, я получаю сообщение об ошибке при запуске sidekiq
LoadError: Unable to autoload constant Itunes::ItunesClient,
expected /app/lib/itunes/itunes_client.rb to define it
2018-06-06T19:38:49.560Z 46606 TID-ov5d572iq WARN:
.rvm/gems/ruby-2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:503:in `load_missing_constant'
.rvm/gems/ruby-2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:193:in `const_missing'
/app/interactors/fetch_itunes_app_service.rb:4:in `call'
class FetchItunesAppService
include Interactor
def call
@client = Itunes::ItunesClient.new
...
end
end
#app/lib/itunes/itunes_client.rb
class Itunes::ItunesClient < Itunes::ItunesBaseClient
...
end
#app/lib/itunes/itunes_base_client.rb
class Itunes::ItunesBaseClient
...
end
Под app/lib/itunes вы имели в виду app/lib/itunes/itunes_client.rb?
@AndreyDeineko правильно. мне почему-то кажется странным помещать все библиотеки прямо под приложение, так как в конечном итоге я буду смешивать все библиотеки с представлениями и моделями контроллеров.
Вы остановили свой сервер, сделали spring stop и перезапустили сервер?
Я не использую пружину в этом случае. Я запустил приложение с rubymine в режиме отладки
eager_load ist установлен в false в разработке, но у меня есть следующее:% w (lib presenters Interactors Finders Strategies Services serializers) .each do | dir | config.autoload_paths + =% W (# {config.root} / app / # {dir}) конец
eager_load = true исправил это, поэтому добавления папки lib в autload_paths явно недостаточно ?! Каково влияние значения true для параметра eager_load?
@ dc10 хотелось бы, чтобы ваш класс был вложен в модуль, например. module Itunes; class ItunesClient < ItunesBaseClient;end;end это связано с тем, как постоянный поиск и вложение модулей работают в ruby. Этот Статья прекрасно объясняет это. Когда вы нетерпеливо загружаете, класс загружается в глобальное пространство имен как Itunes::ItunesClient, а не загружает модуль Itunes в глобальное пространство имен и загружает ItunesClient в пространство имен Itunes. Хотя они кажутся похожими, они имеют разное влияние
@engineersmnky Я тоже попробовал синтаксис модуля, но он не подействовал. тем не менее, настройка eager_load исправила это
Я получаю такую ошибку: stackoverflow.com/questions/44465118/…, возможно, из-за config.eager_load = true. Не так ли?
да, я тоже получил, мне пришлось остановить весну





@jvillian Мне нужно пространство имен. Кроме того, не должно иметь значения наличие другой подпапки, поскольку такое же именование работает с моделями.