Tags do Post ‘rubygems’

Cloud Crowd: A primeira action

cloud-crowd

Cloud Crowd é um controlador de filas para processamento paralelo, desenvolvido em ruby. Pode ser utilizado em Encoding de video, migração de arquivos e bancos de dados, redimensionamento de imagens e etc…

Uma explicação rápida: Em uma máquina você levanta o server, onde é gerenciado a fila (criação, exclusão, status das tarefas e etc…). Em outras máquinas você levanta o node, onde as terefas serão recebidas e executadas. Ao terminar, o node informa ao server, liberando-se para receber outra tarefa.

Essa semana comecei a desvendar os benefícios do Cloud Crowd, principalmente para encoding paralelo de vídeo. Mas antes, tive que entender como ele funciona e o que tem para nos oferecer.

Então, acompanhando o “tutorial” em http://wiki.github.com/documentcloud/cloud-crowd/writing-an-action, escrevi uma pequena action:

class HelloWorld < CloudCrowd::Action
   def process
      Thin::Logging.log("HelloWorld :: -- criando arquivo #{input}!")
      `touch #{input}`
      0
   end
end

Você passa um nome qualquer, e o script cria um arquivo em branco. Simples !?, Mas serviu bem para meus primeiros testes.

Também aproveitei e usei o log do Thin que é o servidor que o Cloud Crowd levanta, para registrar o evento de dentro da action… Isso significa que as mensagens de log da minha action foram registradas no arquivo de log do node que a executou… Se preferir você pode utilizar o Logger do Rails. Como foi apenas um experimento, utilizei o do Thin mesmo.

Cadastrando tarefas:

Para começar a utilizar sua action,  você precisa postar um JSON com as informações necessárias no server, para cadastrar uma tarefa. (Não preciso lembrar que o server e algum node deve estar rodando, certo ?)

Para isso, crie um script ruby, ou rode pelo irb os comandos*:

require 'rubygems'
require 'restclient'
require 'json'
RestClient.post('http://localhost:9173/jobs',{:job => { 'action' => 'hello_world' , 'inputs' => ['/home/rafael/arquivo_teste1', '/home/rafael/arquivo_teste2']}.to_json})

Considerando que o server está rodando na máquina que rodou o script. Caso contrário, altere o localhost pelo ip do Server. E os arquivos são criados (pelo comando “touch”) na máquina que roda o Node. Para fins de teste e desenvolvimento, é possível rodar o server e o node na mesma máquina, já que eles sobem em portas diferentes…

Então é isso… Você já pode paralelizar qualquer tarefa. Basta escrever suas próprias actions… ;)

 

, , , , , , ,

Nenhum Comentário


Ruby: Alternativas para require ‘rubygems’

ruby-logo-justruby

Baseado no comentário de Guilherme Chapiewski encontrado em http://www.rafaelbiriba.com/2009/04/13/ruby-require-rubygems.html, resolvi postar alternativas para suprir essa necessidade do require ‘rubygems’ e porque é errado utilizá-lo !

Primeiramente, vamos para a pergunta que originou este post:
O que há de errado em utilizar require ‘rubygems’ no meu script ?

Bom, analisando o exemplo que eu dei no post do require rubygems, transcrito logo abaixo, onde se você quiser utilizar o pacote “hpricot”, instalado pelo comando gem install hpricot, o código não irá rodar, retornando um erro referente ao rubygems. Usando o require ‘rubygems’ o problema é resolvido, mas não está correto. O motivo é bem simples. Primeiro vamos ver o código em questão:

require 'hpricot' 
require 'open-uri' 
meuXml = Hpricot.XML(open("http://www.exemplo.com/exemplo.xml"))

Concordam comigo que o código acima, é uma simples aplicação em ruby ? O que eu quero dizer é que você pode instalar o hpricot de várias maneiras diferentes ! Por exemplo, acessando o link: http://wiki.github.com/why/hpricot/installing-hpricot, você pode observar que o Hpricot pode ser instalado sem o Rubygems. Sendo assim, ao usar o require “rubygems” em um máquina que não tem o rubygems instalado, vai dar problema na execução !

Então o que fazer se eu instalei o Hpricot pelo rubygems ? Simples…

Você pode facilmente rodar o seu script incluindo -rubygems na linha de comando, conforme o exemplo abaixo:

ruby -rubygems meu_script.rb

Isso fará rodar o pacote rubygems antes de executar sua aplicação meu_script.rb

Fonte: http://gist.github.com/54177

Bom, então é isso.

, , , , , , , ,

1 Comentário


Ruby: require ‘rubygems’

ruby-logo-justruby

Essa semana estive escrevendo alguns códigos usando Ruby on Rails, e encontrei um problema, que demorei um pouco para descobrir sua solução, mas no fim se tratava de algo muito simples e lógico.

Ao instalar o Rails e qualquer outro pacote pelo rubygems ( gem install hpricot, por exemplo), para importar esse pacote no código, é necessário importar a biblioteca do rubygems primeiro.

Manual do RubyGems ( http://docs.rubygems.org/read/book/1 ).

Na prática, eu estava utilizando o código abaixo:

require 'hpricot' 
require 'open-uri' 
meuXml = Hpricot.XML(open("http://www.exemplo.com/exemplo.xml"))

Este codigo abre uma URL, captura seu XML e armazena o conteúdo em uma variável ( string ).

Porém, isso só é possível se incluir a biblioteca do rubygems. Verifique o código abaixo, desta vez, funcionando:

require 'rubygems'
require 'hpricot'
require 'open-uri' 
meuXml = Hpricot.XML(open("http://www.exemplo.com/exemplo.xml"))

 

Bom, então é isso !
—————–
Baseado no comentário recebido depois da publicação deste Post, visite também:
http://www.rafaelbiriba.com/2009/04/29/ruby-require-rubygems-alternativas.html

, , , , , , , , , , ,

7 Comentários



SetPageWidth