Ruby NoMethodError在单个进程中随机类中的每个方法上

Ruby NoMethodError在单个进程中随机类中的每个方法上,ruby,passenger,nomethoderror,Ruby,Passenger,Nomethoderror,在两个不同的场合,我们已经看到一个单一的乘客流程有一个单一类的命名错误问题。它会在代码试图访问的单个类中的任何方法上抛出NoMethodError。好像教室里空无一人。相同的代码在10多台其他主机上运行,也在同一主机上的许多其他乘客进程上运行,但没有一个会遇到此问题。如果有问题的进程被终止并重新启动,问题就会消失 我们最初怀疑在运行时类过载了。然而,当这个问题第二次发生时,这个问题发生在另一个类上。我们怀疑的是Ruby翻译或乘客,但我们没有任何关于根本原因的线索 Ruby版本:1.9.3 Rai

在两个不同的场合,我们已经看到一个单一的乘客流程有一个单一类的命名错误问题。它会在代码试图访问的单个类中的任何方法上抛出NoMethodError。好像教室里空无一人。相同的代码在10多台其他主机上运行,也在同一主机上的许多其他乘客进程上运行,但没有一个会遇到此问题。如果有问题的进程被终止并重新启动,问题就会消失

我们最初怀疑在运行时类过载了。然而,当这个问题第二次发生时,这个问题发生在另一个类上。我们怀疑的是Ruby翻译或乘客,但我们没有任何关于根本原因的线索

Ruby版本:1.9.3 Rails版本:2.3.18

第二次出现时的修订堆栈跟踪。在本例中,它是一个模块,但第一次出现在ActiveRecord类上:

NoMethodError (undefined method `exponential_bounded' for Retry:Module):

app/controllers/pack_controller.rb:242:in `pack'
app/controllers/application_controller.rb:321:in `save_html'
lib/memory_usage_filter.rb:58:in `call'
lib/memory_usage_filter.rb:58:in `filter'
lib/query_log_filter.rb:34:in `call'
lib/query_log_filter.rb:34:in `block in filter'
.../ruby1.9/site_ruby/1.9.1/amazon/querylog.rb:646:in `time'
lib/query_log_filter.rb:26:in `filter'
<internal:prelude>:10:in `synchronize'
.../lib/phusion_passenger/lib/phusion_passenger/rack/request_handler.rb:96:in   `process_request'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_request_handler.rb:513:in  `accept_and_process_next_request'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_request_handler.rb:274:in   `main_loop'
.../lib/phusion_passenger/lib/phusion_passenger/rack/application_spawner.rb:206:in   `start_request_handler'
.../lib/phusion_passenger/lib/phusion_passenger/rack/application_spawner.rb:171:in   `block in handle_spawn_application'
.../lib/phusion_passenger/lib/phusion_passenger/utils.rb:479:in `safe_fork'
.../lib/phusion_passenger/lib/phusion_passenger/rack/application_spawner.rb:166:in `handle_spawn_application'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server.rb:358:in `server_main_loop'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server.rb:207:in `start_synchronously'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server.rb:181:in `start'
.../lib/phusion_passenger/lib/phusion_passenger/rack/application_spawner.rb:129:in `start'
.../lib/phusion_passenger/lib/phusion_passenger/spawn_manager.rb:253:in `block (2 levels) in spawn_rack_application'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server_collection.rb:132:in `lookup_or_add'
.../lib/phusion_passenger/lib/phusion_passenger/spawn_manager.rb:246:in `block in spawn_rack_application'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server_collection.rb:82:in `block in synchronize'
<internal:prelude>:10:in `synchronize'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
.../lib/phusion_passenger/lib/phusion_passenger/spawn_manager.rb:244:in `spawn_rack_application'
.../lib/phusion_passenger/lib/phusion_passenger/spawn_manager.rb:137:in `spawn_application'
.../lib/phusion_passenger/lib/phusion_passenger/spawn_manager.rb:275:in `handle_spawn_application'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server.rb:358:in `server_main_loop'
.../lib/phusion_passenger/lib/phusion_passenger/abstract_server.rb:207:in `start_synchronously'
.../lib/phusion_passenger/helper-scripts/passenger-spawn-server:99:in `<main>' 
NoMethodError(用于重试的未定义方法“指数有界”:模块):
app/controllers/pack_controller.rb:242:in'pack'
app/controllers/application\u controller.rb:321:in'save\u html'
lib/memory\u usage\u filter.rb:58:in'call'
lib/memory\u usage\u filter.rb:58:in'filter'
lib/query\u log\u filter.rb:34:in'call'
lib/query\u log\u filter.rb:34:in'block in filter'
…/ruby1.9/site_ruby/1.9.1/amazon/querylog.rb:646:in'time'
lib/query\u log\u filter.rb:26:in'filter'
:10:在“同步”中
…/lib/phusion\u passenger/lib/phusion\u passenger/rack/request\u handler.rb:96:正在处理请求
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u request\u handler.rb:513:in'accept\u and\u process\u next\u request'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u request\u handler.rb:274:in'main\u loop'
…/lib/phusion\u passenger/lib/phusion\u passenger/rack/application\u spawner.rb:206:in'start\u request\u handler'
…/lib/phusion\u passenger/lib/phusion\u passenger/rack/application\u spawner.rb:171:in`block in handle\u spawn\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/utils.rb:479:in'safe\u fork'
…/lib/phusion\u passenger/lib/phusion\u passenger/rack/application\u spawner.rb:166:in'handle\u spawn\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server.rb:358:in'server\u main\u loop'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server.rb:207:in'start\u synchronously'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server.rb:181:in'start'
…/lib/phusion\u passenger/lib/phusion\u passenger/rack/application\u spawner.rb:129:in'start'
…/lib/phusion\u passenger/lib/phusion\u passenger/spawn\u manager.rb:253:in`spawn\u rack\u应用程序中的块(2个级别)'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server\u collection.rb:132:在“查找”或“添加”中
…/lib/phusion\u passenger/lib/phusion\u passenger/spawn\u manager.rb:246:in`block in spawn\u rack\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server\u collection.rb:82:在'block in synchronize'中
:10:在“同步”中
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server\u collection.rb:79:in'synchronize'
…/lib/phusion\u passenger/lib/phusion\u passenger/spawn\u manager.rb:244:in'spawn\u rack\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/spawn\u manager.rb:137:in'spawn\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/spawn\u manager.rb:275:in'handle\u spawn\u application'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server.rb:358:in'server\u main\u loop'
…/lib/phusion\u passenger/lib/phusion\u passenger/abstract\u server.rb:207:in'start\u synchronously'
…/lib/phusion\u乘客/助手脚本/乘客产卵服务器:99:in`'

这是在服务器(重新)启动时发生的,还是在服务器启动并运行一段时间后随机发生的?随机。这就是说,如果不使用,我们的乘客进程会在一定时间后停止并重新启动。所以它可能就在乘客程序重新启动之后。