关注未加载 Rails 5

Concern is not loading in Rails 5

我有一个基本的 Rails 应用程序,我正在尝试使用关注点来干燥模型。在开发环境中一切正常,但是当我尝试将应用程序上传到 Heroku 时,它不断给我这个错误:

/app/app/models/address.rb:3:in `<class:Address>': uninitialized constant Address::Persistable (NameError)

我试过禁用预先加载,但没有用。

这是我的地址模型:

class Address < ApplicationRecord

  include Persistable

  belongs_to :city
  belongs_to :company

  validates :city_id, :human, :lat, :lng, presence: true
end

这是我命名为 "persistable" 的模块,位于 app/models/concerns/persistable.rb

module Persistable
  extend ActiveSupport::Concern

  included do
    scope :historical, -> { where(is_historical: true) }
    scope :deleted, -> { where(is_deleted: true) }
    default_scope { where(is_historical: false, is_deleted: false) }

    def delete
      update_attribute(:is_deleted, true)
    end

    def archive
      update_attribute(:is_historical, true)
    end

    def revive
      update_attribute(:is_historical, false)
      update_attribute(:is_deleted, false)
    end
  end
end

我已经做了:

没有解决,我还有这个问题!

更新

我使用命令形式 guide rails r 'puts ActiveSupport::Dependencies.autoload_paths' 来检查 autoload_paths 我得到了:

D:/work/rails/www/app/models/concerns
D:/work/rails/www/app/assets
D:/work/rails/www/app/channels
D:/work/rails/www/app/controllers
D:/work/rails/www/app/helpers
D:/work/rails/www/app/jobs
D:/work/rails/www/app/mailers
D:/work/rails/www/app/models
D:/work/rails/www/test/mailers/previews

这应该给了你一个提示:

uninitialized constant Address::Persistable (NameError)

出于某种原因,它试图在 Address 中定位模块。明确并要求顶级 Persistable

class Address < ApplicationRecord

  include ::Persistable

好吧,问题出在 Heroku 服务器配置上。似乎 Heroku 阻塞了常量名称 Persistable。一旦我将 Persistable 的每次出现重命名为 Archivable,它就开始工作了。

我遇到了类似的问题,但出现了相同的错误消息,但修复方法不同。

运行 spring stop 帮我解决了。

当 rails 自动加载有问题时,重置 spring 通常是一个好的开始。