活动资源"NoMethodError (undefined method `path' for nil:NilClass):"间歇性错误



我遇到了一个间歇性错误,其中ActiveResource资源调用如下:

Cart.where(session_id: get_guid, status: 1)

引发错误:

NoMethodError (undefined method `path' for nil:NilClass)

但只是间歇性的。重新启动 Rails 服务器可以暂时解决问题,但不确定的时间后,它再次中断。

问题的根源是由于Rails的自动加载功能。一些认识使我找到了这个解决方案。

我们有很多 ActiveResource 资源,所以为了轻松初始化资源,我们将安装程序放在初始值设定项中(仅在 Rails 服务器启动期间运行):

# config/initializers/active_resource_setup.rb
Cart.site = ENV["ROOT_URL"]

我还意识到,这在生产环境中不是问题。这在以前并不清楚,因为这个问题出现在一次重大的 Rails 升级过程中,所以我认为我一开始就破坏了它。

但是,问题的根源是每当对源进行更改时,Rails 都会自动重新加载资源类定义文件。它将重新加载类定义:

# app/models/resources/cart.rb
class Cart < ActiveResource::Base
validates :session_id, presence: true
end

由于Cart.site定义未按预期在此文件中,因此资源被有效地重置,并且site配置被自动重新加载过程破坏。

解决方案是将Cart.site定义移动到资源定义中:

# app/models/resources/cart.rb
class Cart < ActiveResource::Base
self.site = ENV["ROOT_URL"]
validates :session_id, presence: true
end

相关内容

  • 没有找到相关文章

最新更新