关注未加载 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
我已经做了:
- 试图关闭预先加载
- 试图将
Persistable
模块移出 concerns
目录
- 试图将
concerns
路径包含到自动加载配置
没有解决,我还有这个问题!
更新
我使用命令形式 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 通常是一个好的开始。
我有一个基本的 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
路径包含到自动加载配置
没有解决,我还有这个问题!
更新
我使用命令形式 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 通常是一个好的开始。