O Active Resource usa HTTP para acessar APIs RESTful e por isto está suscetível a problemas de lentidão ou servidores fora do ar. Em alguns casos, suas chamadas ao Active Resource podem expirar (timeout). Agora você pode controlar o tempo de expiração com a propriedade timeout.
self.site = "http://api.people.com:3000/"
self.timeout = 5 # espera 5 segundos antes de expirar
end
Neste exemplo estou configurando o tempo de timeout para 5 segundos. Você pode configurar à seu gosto, dependendo da API RESTful que estiver acessando. É recomendado que este valor seja baixo, para permitir que seu sistema falhe rápido (ou fail-fast, para mais informações aconselho ler este pdf), impedindo falhas em cascata que poderiam incapacitar o seu servidor.
Internamente o Active Resource se baseia na biblioteca Net::HTTP para fazer requests HTTP. Quando você define um valor para a propriedade timeout, o mesmo valor é definido para o read_timeout da instância do objeto Net::HTTP que está sendo usado.
O valor padrão é de 60 segundos.
4 Comentários em "Edge Rails: Timeouts"
Opa Carlos tudo bem?
Rapaz estou tendo problemas que talvez tenha algo relacionado com o que você diz:
Tenho uma aplicação que devido a tantos registros que ela tem, acaba ficando super pesada em requisição. Então acaba dando timeout. Teria ligação com o que você diz?
E outra coisa, sabe de alguma solução boa para isto?
Não sei Rodrigo, que tipo de aplicação?
Uma do tipo que trabalha com cronograma e existem marcações para cada dia. Estou com um problema muito grave que é a quantidade de registros que retorna por vez. Tenho usuários que tem cerca de 500 itens em um certo mês. E o pior para cada registro desse eu preciso fazer contas matemáticas que vem de outras tabelas, utiliznado um plugin para rails no firefox são feitas mais de 1000 consultas. Estou fazendo joins para ver se acabo com o problema de timeout mas ainda são muitas consultas.
Assim não tem jeito. Algo que você poderia fazer é criar algum proceso em background para os cálculos. E evitar exibir tudo na tela usando paginação.
Deixe o seu comentário!