2

我不断在我的程序中随处随机出现 ActiveRecord::MissingAttributeError 错误。我有使用 nginx 运行的乘客(30 个实例)。我在开发中没有这个问题。当我删除缓存资金时,它在生产中运行良好。

这是错误消息:

ActiveRecord::MissingAttributeError (missing attribute: deposit_amount):
  lib/econveyance_pro/accounting/bsoa.rb:96:in `collect_deposit'
  lib/econveyance_pro/accounting/bsoa.rb:24:in `calculate'
  app/controllers/accounting_controller.rb:213:in `calculate_buyer_file_accounting'
  app/controllers/accounting_controller.rb:175:in `generate_accounting'
  app/controllers/accounting_controller.rb:153:in `generate_accounting_and_save'
  lib/econveyance_pro/document_manager.rb:18:in `temporary_tables_xml'
  lib/econveyance_pro/document_manager.rb:17:in `each'
  lib/econveyance_pro/document_manager.rb:17:in `temporary_tables_xml'
  app/controllers/document_manager_controller.rb:40:in `xml'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/railz/application_spawner.rb:385:in `start_request_handler'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/railz/application_spawner.rb:343:in `handle_spawn_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/utils.rb:184:in `safe_fork'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/railz/application_spawner.rb:341:in `handle_spawn_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:352:in `__send__'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:163:in `start'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/railz/application_spawner.rb:209:in `start'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/spawn_manager.rb:262:in `spawn_rails_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/spawn_manager.rb:256:in `spawn_rails_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/spawn_manager.rb:255:in `spawn_rails_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/spawn_manager.rb:154:in `spawn_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/spawn_manager.rb:287:in `handle_spawn_application'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:352:in `__send__'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
  /opt/ruby/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'

deposit_amount 确实存在于我的数据库中。

4

4 回答 4

1

Did you change your database table schema? The memcached objects are probably using the old schema and need to be cleared out.

Flush memcached using $cache.flush_all, sending "flush_all" to memcached via 'telnet localhost 11211', or by restarting memcached.

于 2010-04-23T01:08:35.707 回答
0

我认为这可能是一个生产问题。当您在生产环境中启动应用程序时,它会在所有文件的应用程序内缓存。你没有完全解释它,但我确实认为问题是因为你确实进行了迁移并且可能没有重新启动服务器。

如果是这种情况,可能是因为您正在使用的缓存可能仍然对该属性的圆顶引用不再存在。=)

于 2012-11-09T18:40:56.793 回答
0

问题是当我停止使用缓存资金时,这部分代码可以正常工作而不会出现问题。当我启用缓存资金时,我得到了这个错误,我已经通过了几次查询。

当打开缓存资金时,我也会在程序的随机区域中针对不同的属性收到此错误。

于 2010-01-11T16:32:37.440 回答
0

缺少的属性可能存在于您的数据库中,但确实存在于您的架构和迁移中?

尝试自己通过 sql 查询访问它,然后在控制台中,如果两者都可以,请检查控制器是否存在 sql 中的拼写错误

于 2010-01-10T01:25:23.477 回答