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凍結到應用程序中。感謝您的幫助
對等
AFAIK活動資源中沒有2分鐘的任何內容。雖然也許HTTP客戶端有它自己的超時。 – 2010-12-10 18:33:09
OOC - 當您在控制檯中運行它時。多久時間?即它需要> 2分鐘,還是真的運行得很快(因爲你已經同步)? – 2010-12-10 18:35:28