4

我正在尝试从 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/notification/auto_thank.rb 来定义常量 AutoThank,但没有

我错过了什么?

4

1 回答 1

2

如果可以,请在app/. 从 Rails 6 开始,其中的所有内容都将自动成为自动加载路径的一部分。Rails 5 更具选择性。

在这种情况下调用它:app/notifications/notification/auto_thank.rb

路径的第一部分被忽略。第二个(可选)部分是命名空间。

请注意,要让它显示在自动加载器中,您可能需要使用spring stop. app/...每次引入新路径时都必须这样做。

于 2019-10-28T17:43:55.000 回答