Desenvolvimento

7 jan, 2013

Conectando Node.js para Redis To Go no Heroku

Publicidade

A stack Cedar do Heroku é incrível por várias razões. Uma delas é que ela é de primeira classe Node.js de hospedagem.

Eu estou fazendo um teste com um aplicativo que usa Redis para fazer cache de dados e não encontrei qualquer documentação sobre como conectar um aplicativo Node para o add-on Redis ToGo. Veja como foi que eu fiz:

Isso pressupõe que você já tenha criado o app Heroku ou não precisa de qualquer ajuda para fazer isso. O Heroku possui um ótimo tutorial sobre como fazer o deploy de um aplicativo Node em Cedar.

Primeiro, adicione os add-ons Redis ToGo através do comando heroku:

heroku addons:add redistogo

Instalar o add-on adicionará automaticamente um ambiente variável REDISTOGO_URL para seu aplicativo. Você pode ver o valor dele com o comando heroku config.

O cliente Redis para o Node4 que eu uso é o node_redis, então o que ver a seguir é específico para ele. Se você usar outro cliente, ajuste conforme necessário.

Quando o node_redis se conecta a uma instância Redis em sua máquina local, ele assume a porta padrão e informações host; então instanciar o cliente fica facinho assim:

var redis = require("redis").createClient(); 

Isso funciona muito bem em desenvolvimento, mas precisamos dele para autenticar Redis ToGo na produção. Para lidar com os dois casos, eu só verifico a existência do REDISTOGO_URL, assim:

if (process.env.REDISTOGO_URL) {
// TODO: redistogo connection
} else {
var redis = require("redis").createClient();
}

Tudo deve funcionar perfeitamente no desenvolvimento, mas ainda precisamos implementar a conexão Redis To Go. Para fazer isso, precisamos extrair a porta, o hostname e a string de autenticação do REDISTOGO_URL usando lib url built-in do Node:

// inside if statement
var rtg   = require("url").parse(process.env.REDISTOGO_URL);
var redis = require("redis").createClient(rtg.port, rtg.hostname);

redis.auth(rtg.auth.split(":")[1]);

Por alguma razão, a lib url do Node não vai dividir a sessão auth do nome de usuário e senha, de modo que o que está acontecendo no rtg.auth.split(“:”)[1] seja passado para o comando auth.

Isso foi tudo o que precisei para ter meu aplicativo ligado e funcionando perfeitamente. Espero que isso ajude você a fazer o mesmo!

***

Texto original disponível em http://blog.jerodsanto.net/2011/06/connecting-node-js-to-redis-to-go-on-heroku/