Частое SystemExit в Ruby, когда делает HTTP звонки

голоса
18

У меня есть Рубин на Rails веб-сайт, который делает HTTP звонки на внешний веб-службы.

Примерно раз в день я получаю SystemExit (StackTrace ниже) по электронной почте об ошибке, когда вызов службы произошел сбой. Если бы я тогда попробовать точно такой же запрос на моем сайте моменты позже он работает отлично. Это происходило, так как сайт продолжал жить, и я был не повезло отслеживания, что вызывает его.

Рубин версия 1.8.6 и рельсы является версия 1.2.6.

У кого-то еще есть такая проблема?

Это ошибка и StackTrace.

SystemExit произошел выход /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.6/lib/fcgi_handler.rb:116:in»/usr/local/lib/ruby/gems/1.8/gems/ рельсы-1.2.6 / Библиотека / fcgi_handler.rb: 116: в exit_now_handler»/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.4/lib/active_support/inflector.rb:250:in to_proc '/usr/local/lib/ruby/1.8/net/protocol.rb:133:in называют' /usr/local/lib/ruby/1.8/net/protocol.rb:133:in sysread»/ USR / местные / Библиотека / рубин / 1,8 / нетто / protocol.rb: 133: в rbuf_fill '/usr/local/lib/ruby/1.8/timeout.rb:56:in тайм-аут' /usr/local/lib/ruby/1.8/timeout. гь: 76: в тайм-аут '/usr/local/lib/ruby/1.8/net/protocol.rb:132:in rbuf_fill' /usr/local/lib/ruby/1.8/net/protocol.rb:116:in readuntil '/usr/local/lib/ruby/1.8/net/protocol.rb:126:in Readline' /usr/local/lib/ruby/1.8/net/http.rb:2017:in read_status_line»/ USR / местные / Библиотека / рубин / 1,8 / нетто / http.rb: 2006: в read_new '/usr/local/lib/ruby/1.8/net/http.rb:1047:in запросу' /usr/local/lib/ruby/1.8/ нетто / http.rb: 945: в request_get»/usr/local/lib/ruby/1.8/net/http.rb:380:i п get_response '/usr/local/lib/ruby/1.8/net/http.rb:543:in начать' /usr/local/lib/ruby/1.8/net/http.rb:379:in get_response»

Задан 02/08/2008 в 18:26
источник пользователем
На других языках...                            


4 ответов

голоса
8

Прошло некоторое время , поскольку я использовал FCGI , но я думаю , что процесс FCGI может бросить SystemExit если нить слишком долго. Это может быть веб - сервис не отвечает или даже медленный запрос DNS. Некоторые результаты Google показывают аналогичную ошибку с Python и FCGI так двигаться к беспородных бы хорошей идеей. Это сообщение моя ссылка , которую я использовал для установки дворняжки , и я по- прежнему обращаться к нему.

Ответил 03/08/2008 d 06:22
источник пользователем

голоса
8

Использование FCGI с Рубином, как известно, очень плохо.

Практически все переместились в Барбос по этой причине, и я рекомендую вам сделать то же самое.

Ответил 02/08/2008 d 18:50
источник пользователем

голоса
5

Я использовал, чтобы получить это все время на Apache1 / FastCGI. Я думаю, что это вызвано FastCGI висит перед рубином делаются.

Переключение на беспородных является хорошим первым шагом, но есть больше, чтобы сделать. Это плохая идея, чтобы отбраковать от веб-сервисов на живых страницах, в частности, от Rails. Рельсы не поточно-. Количество одновременных подключений вы можете поддержать равно числу дворняг (или пассажирских процессов) в кластере.

Если у вас есть дворняга и кто-то получает доступ к странице, которая вызывает веб-сервис, который занимает 10 секунд, чтобы тайм-аут, каждый запрос на ваш сайт будет таймаут в это время. Большинство балансировки нагрузки просто цикл через ваши дворняг вслепую, так что если у вас есть две дворняги, каждый запрос будет тайм-аут.

Все , что может быть непредсказуемо медленным должно произойти в очереди заданий. Первый хит в / медленное / действие добавляет задание в очередь, и / медленно / действие продолжает освежать с помощью обновления страницы или запросов с помощью AJAX , пока работа не будет завершена, и тогда вы получите результаты из очереди заданий. Есть несколько очередей заданий для Rails в настоящее время, но самый старый и , вероятно , наиболее широко используется один BackgroundRB .

Другой вариант, в зависимости от характера вашего приложения, чтобы отбраковать на службу каждые N минут через хроны, кэшировать данные локально, и ваша живая страница чтения из кэша.

Ответил 30/08/2008 d 05:55
источник пользователем

голоса
1

Я также хотел бы взглянуть на Пассажира . Это намного легче идти , чем традиционные решения Apache / Nginx + Mongrel.

Ответил 11/08/2008 d 17:36
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more