2009-12-03 143 views
1

我從ActiveResource得到一個非常奇怪的錯誤。我有一種方法調用另一個系統來獲取產品列表。該清單非常大,需要大約3分鐘才能生成和傳輸。由於這真的只有一天一次有點事,我建立了一個rake任務來運行它。在生產中,每當我運行rake任務時,都會失敗,並顯示500錯誤。下面是一些示例輸出ActiveResource 500內部服務器錯誤

$ time RAILS_ENV=production rake api:sync 
rake aborted! 
Failed with 500 Internal Server Error 

(See full trace by running task with --trace) 

real 2m1.753s 
user 0m1.188s 
sys 0m0.188s 

然後我試圖使用腳本運行:

$ RAILS_ENV=production script/runner 'Product.synchronize!(ProductManager::Product.find_valid_products)' 
/var/www/apps/api/releases/20091202203413/vendor/rails/railties/lib/commands/runner.rb:48: Failed with 500 Internal Server Error (ActiveResource::ServerError) 
    from /usr/local/lib/ruby/1.8/net/protocol.rb:133:in `rbuf_fill' 
    from /usr/local/lib/ruby/1.8/timeout.rb:62:in `timeout' 
    from /usr/local/lib/ruby/1.8/timeout.rb:93:in `timeout' 
    from /usr/local/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill' 
    from /usr/local/lib/ruby/1.8/net/protocol.rb:116:in `readuntil' 
    from /usr/local/lib/ruby/1.8/net/protocol.rb:126:in `readline' 
    from /usr/local/lib/ruby/1.8/net/http.rb:2020:in `read_status_line' 
    from /usr/local/lib/ruby/1.8/net/http.rb:2009:in `read_new' 
    ... 17 levels... 
    from /var/www/apps/api/releases/20091202203413/vendor/rails/railties/lib/commands/runner.rb:48 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require' 
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' 
    from script/runner:3 

但是如果我跳進控制檯來運行它,一切都很好:

$ script/console production 
Loading production environment (Rails 2.3.5) 
>> Product.synchronize!(ProductManager::Product.find_valid_products); nil # prevent dump to console 
=> nil 
>> 

我懷疑它是一個超時,所以我將ProductManager :: Product類的超時值設置爲5分鐘,但是沒有任何效果。有趣的是,當我通過rake或腳本/ runner運行時,錯誤發生在2分鐘和1秒內,沒有失敗。在開發和分期中沒有問題。生產的ActiveResource有某種隱藏的2分鐘覆蓋我找不到?

如果你沒有從軌跡中得到它,我們使用Rails 2.3.5凍結到應用程序中。感謝您的幫助

對等

+0

AFAIK活動資源中沒有2分鐘的任何內容。雖然也許HTTP客戶端有它自己的超時。 – 2010-12-10 18:33:09

+0

OOC - 當您在控制檯中運行它時。多久時間?即它需要> 2分鐘,還是真的運行得很快(因爲你已經同步)? – 2010-12-10 18:35:28

回答

0

原來,這是一個Apache的設置。 httpd.conf文件中的RequestTimeout爲120秒。一旦我們宣佈一切都很好。