【问题标题】:Concern is not loading in Rails 5Rails 5 中未加载关注点
【发布时间】:2016-11-19 06:10:27
【问题描述】:

我有一个基本的 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 路径包含到自动加载配置中

没有用,我还是有这个问题!

更新

我执行了guiderails 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

【问题讨论】:

    标签: ruby-on-rails ruby heroku activesupport-concern


    【解决方案1】:

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

    运行spring stop 为我解决了这个问题。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这应该给你一个提示:

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

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

        class Address < ApplicationRecord
        
          include ::Persistable
        

        【讨论】:

        • 谢谢!但错误仍然出现,以不同的形式出现:/app/app/models/address.rb:3:in `&lt;class:Address&gt;': uninitialized constant Persistable (NameError)。我应该去哪里看?
        • @Max: 似乎您的 autoload_paths 以某种方式搞砸了。我现在会调查一下。
        • 嗯,这很有趣。我暂时没有想法。 :)
        • 好的,如果有什么变化我会回答这个问题,无论如何谢谢!
        • 我发布了一个答案,解决方案很简单 =)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多