Edge Rails: Timeouts 4

Publicado por Carlos Brando em 06 de Maio de 2008

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.

class Person < ActiveResource::Base
  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.

Edge Rails: Clonando um ActiveResource

Publicado por Carlos Brando em 10 de Abril de 2008

No Rails 2.1 poderemos clonar um resource existente:

ryan = Person.find(1)
not_ryan = ryan.clone
not_ryan.new?  # => true

Só vale tomar nota que a cópia não clona nenhum atributo da classe, apenas os atributos do resource.

ryan = Person.find(1)
ryan.address = StreetAddress.find(1, :person_id => ryan.id)
ryan.hash = {:not => "an ARes instance"} 

not_ryan = ryan.clone
not_ryan.new?            # => true
not_ryan.address         # => NoMethodError
not_ryan.hash            # => {:not => "an ARes instance"}