2

我有一个基本的 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

我已经做了什么:

  • 试图关闭急切加载
  • 试图将Persistable模块移出concerns目录
  • 试图包含concerns自动加载配置的路径

没有任何效果,我仍然有这个问题!

更新

我做了命令表单指南 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
4

3 回答 3

6

我有一个类似的问题,同样的错误信息,但不同的修复。

跑步spring stop为我解决了这个问题。

当导轨无法自动加载时,重置弹簧通常是一个好的开始。

于 2018-03-17T09:07:35.937 回答
1

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

于 2016-11-22T04:16:17.987 回答
0

这应该给你一个提示:

未初始化的常量 Address::Persistable (NameError)

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

class Address < ApplicationRecord

  include ::Persistable
于 2016-11-19T06:47:57.120 回答