ActiveResource 500 Внутренняя ошибка сервера - PullRequest
1 голос
/ 03 декабря 2009

Я получаю действительно странную ошибку от ActiveResource. У меня есть метод, который вызывает другую систему, чтобы получить список продуктов. Список довольно большой и занимает около 3 минут для генерации и передачи. Так как это действительно всего лишь один раз в день, я создал для этого грабли. В производственном процессе всякий раз, когда я запускаю грабли, происходит сбой с ошибкой 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

Тогда я попытался использовать скрипт runner:

$ 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
>> 

Я подозревал, что это был тайм-аут, поэтому я установил значение тайм-аута на 5 минут в классе ProductManager :: Product, но это никак не отразилось. Интересно то, что когда я запускаю через грабли или скрипт / бегун, ошибка происходит через 2 минуты и 1 секунду без сбоев. В разработке и постановке нет проблем. Есть ли в ActiveResource скрытое 2-минутное переопределение, которое я не могу найти?

Если вы не получили его по следам, мы используем Rails 2.3.5, встроенный в приложение. Спасибо за помощь

Peer

1 Ответ

0 голосов
/ 11 декабря 2010

Оказывается, это была настройка Apache. Время запроса в файле httpd.conf составило 120 секунд. Как только мы повысили, что все было хорошо.

...