Publicado por Rafael Rosa em 12 de August de 2009
Backgrounded – Um encapsulador simples para rodar tarefas em segundo plano
Assim como Ryan Sonnek, eu tentei várias opções para executar processos em segundo plano nos meus aplicativos Ruby, chegando até mesmo ao ponto de criar minha própria (imperfeita) solução. Como Ryan diz em seu blog, muitas das bibliotecas populares tem interfaces complicadas e parecem ter algo "errado".
Porém, devo discordar quando ele diz que todas as soluções para rodar processos Ruby em segundo plano sejam um lixo, e tenho certeza que ele não quer dizer isso mesmo. Apesar disso, sua proposta com o Backgrounded é interessante, simples e concisa, sendo, na prática, apenas um encapsulador simples para outras soluções.
Com o Backgrounded, se você quer que um certo método seja executado em segundo plano toda vez que for chamado, você pode especificar o seguinte:
class User
backgrounded :do_stuff
def do_stuff
# do all your work here
end
end
...e então chamar o método normalmente. A efetiva execução em segundo plano pode ser feita com qualquer solução que você desejar, mas o delayed_job já vem no pacote.
A abordagem de meta-programação escolhida pelo Ryan para declarar os métodos a serem executados em segundo plano também serve como documentação, e foca métodos específicos ao invés de exigir a criação de classes separadas para eles.
Você pode baixar o Backgrounded como gem ou baixar os fontes a partir do Github.

Clique aqui para adicionar ao del.icio.us

18 de August de 2009 às 10:13
Hmm.. realmente usar 'acts_as_way' eh interessante, porem eu ainda fico com o spawn:
http://github.com/tra/spawn/tree
Pra usar fork inves de thread. E o nome eh mais legal =D
Eu ainda me perco nessa discussao, (allow_concurrency e tal)... Downside eh ser plugin, alguem tinha que gemify ele...