Rails 6 Autoload не находит класс - PullRequest
1 голос
/ 28 октября 2019

Я пытаюсь перейти с Rails 5 на 6. Я сделал шаги по обновлению, включая добавление этого:

# config/application.rb
config.load_defaults 6.0

У меня есть этот класс:

# lib/notification/auto_thank.rb
module Notification
  class AutoThank
    def perform
      # stuff
    end
  end
end

Который используетсяв задаче:

namespace :notify do
  task auto_thank: :environment do
    Notification::AutoThank.new.perform
  end
end

Когда я делаю puts config.autoload_paths, он отображается в списке, поэтому я ожидаю, что он автоматически загрузится:

/my/app/path/lib/notification/auto_thank.rb

Но когда я запускаюзадача Я получаю сообщение об ошибке:

NameError: неинициализированная константа Уведомление

Становится странным. Когда я добавляю требование к задаче:

task auto_thank: :environment do
  require '/my/app/path/lib/notification/auto_thank.rb'
  Notification::AutoThank.new.perform
end

, я получаю другую ошибку:

NameError: ожидаемый файл / my / app / path / lib / messages / auto_thank. рб для определения константы AutoThank, но не

Чего мне не хватает?

1 Ответ

0 голосов
/ 28 октября 2019

Если вы можете, найдите свой код автозагрузки в app/. Начиная с Rails 6 все там будет автоматически частью пути автозагрузки. Rails 5 был более избирательным.

В этом случае назовите его: app/notifications/notification/auto_thank.rb

Первая часть пути игнорируется. Вторая (необязательная) часть - это пространство имен.

Обратите внимание, что для отображения этого в автозагрузчике вам может потребоваться остановить процесс Spring с помощью spring stop. Это необходимо делать каждый раз, когда вы вводите новый app/... путь.

...