Не удалось автозагрузить константу

В 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

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

dc10 06.06.2018 21:56

Под app/lib/itunes вы имели в виду app/lib/itunes/itunes_client.rb?

Andrey Deineko 06.06.2018 22:01

@AndreyDeineko правильно. мне почему-то кажется странным помещать все библиотеки прямо под приложение, так как в конечном итоге я буду смешивать все библиотеки с представлениями и моделями контроллеров.

dc10 06.06.2018 22:02

Вы остановили свой сервер, сделали spring stop и перезапустили сервер?

jvillian 06.06.2018 22:07

Я не использую пружину в этом случае. Я запустил приложение с rubymine в режиме отладки

dc10 06.06.2018 22:10
config.eager_load = true от здесь, может быть? Для меня это сработало.
iGian 06.06.2018 22:10

eager_load ist установлен в false в разработке, но у меня есть следующее:% w (lib presenters Interactors Finders Strategies Services serializers) .each do | dir | config.autoload_paths + =% W (# {config.root} / app / # {dir}) конец

dc10 06.06.2018 22:13

eager_load = true исправил это, поэтому добавления папки lib в autload_paths явно недостаточно ?! Каково влияние значения true для параметра eager_load?

dc10 06.06.2018 22:18

@ dc10 хотелось бы, чтобы ваш класс был вложен в модуль, например. module Itunes; class ItunesClient < ItunesBaseClient;end;end это связано с тем, как постоянный поиск и вложение модулей работают в ruby. Этот Статья прекрасно объясняет это. Когда вы нетерпеливо загружаете, класс загружается в глобальное пространство имен как Itunes::ItunesClient, а не загружает модуль Itunes в глобальное пространство имен и загружает ItunesClient в пространство имен Itunes. Хотя они кажутся похожими, они имеют разное влияние

engineersmnky 06.06.2018 22:28

@engineersmnky Я тоже попробовал синтаксис модуля, но он не подействовал. тем не менее, настройка eager_load исправила это

dc10 06.06.2018 22:31

Я получаю такую ​​ошибку: stackoverflow.com/questions/44465118/…, возможно, из-за config.eager_load = true. Не так ли?

iGian 07.06.2018 20:58

да, я тоже получил, мне пришлось остановить весну

dc10 07.06.2018 21:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
1 263
0

Другие вопросы по теме