ActionMailer do Rails 3

Posted by André Ribeiro Camargo Wed, 01 Sep 2010 17:26:00 GMT

ActionMailer é uma biblioteca do Rails que trata da manipulação de e-mails e nesta versão 3.0 teve várias melhorias.

Antigamente, você passava parâmetros para “view” através do método “body”, mas, na nova implementação você define os parâmetros como variáveis de instância na action do mailer e depois simplesmente as referencia na view.

Demorei algumas horas para me dar por conta disso, “herança” da versão antiga.

Para finalizar, se quiser usar os helpers na view do mailer, inclua na classe do mailer:

helper :application

Essa dica veio daqui

Muito legal ;-)

Posted in , , ,

Rails 3 chegou

Posted by André Ribeiro Camargo Mon, 30 Aug 2010 17:49:00 GMT

Momentos de grande excitação na comunidade Ruby On Rails, a versão 3.0 foi lançada ontem.

Já faz alguns dias que estou trabalhando com ele, a experiência está sendo muito boa.

No momento, continuo escrevendo testes de integração, já cobri cerca de 1/3 dos módulos da aplicação dos shoppings.

Vou continuar no edge, até mesmo porque não sei quando vou terminar de portar isso :-)

Posted in , ,

Diminuindo o tempo de instalação das Gems

Posted by André Ribeiro Camargo Wed, 28 Jul 2010 11:31:00 GMT

Dica legal: Faster Ruby Gems installs

Normalmente eu passava—no-rdoc—no-ri pela linha de comando mesmo.

Posted in , ,

Acessando o Model da sessão para quem usa ActiveRecordStore

Posted by André Ribeiro Camargo Sun, 25 Jul 2010 20:52:00 GMT

Esta é útil para quem armazena sessões no banco de dados.

Antigamente, para acessar o model bastava “session.model”, agora tem que ser através de “request.env[‘rack.session.record’]”.

Fica a dica…

Posted in ,

O "problema" do parâmetro que contém pontos

Posted by André Ribeiro Camargo Sat, 24 Jul 2010 01:40:00 GMT

Aventura continua, já tenho doze requisições passando no teste de integração do portal. Antes tinha ZERO testes, então, acho que estamos evoluindo rapidamente.

Mas, só passei para avisar aqueles que estão migrando do Rails 1.1.6, para QUALQUER versão superior, sobre o “problema do parâmetro que contém pontos”.

Exemplo:

Aplicação deve processar uma requisição cujo caminho possui pontos, tipo:

/descadastrar/andre@boaideia.inf.br

A rota no Rails 1.1.6 seria:

map.connect "descadastrar/:email", :controller => "controlador", :action => :acao

Para funcionar no Rails3, tem que fazer:

match "descadastrar/:email" => "controlador#acao", :constraints => { :email => /.*/ }

Daí vai funcionar beleza, o “problema” é que apartir da versão 2.0 o Rails utiliza os pontos para escolher o formato da resposta da requisição.

Ai ai, já fazia algumas horas que eu estava procurando entender o motivo pelo qual essa versão 3 me retornava “No route matches”. Coisa triste a ignorância.

PS: NESTE caso, como o parâmetro é um endereço de correio eletrônico, vocês podem até utilizar um regex mais apropriado do que este do exemplo.

Fui!

Posted in , ,

MySQL INSERT DELAYED

Posted by André Ribeiro Camargo Tue, 08 Jun 2010 10:30:00 GMT

Uso MySQL na aplicação dos shoppings com storage InnoDB. Funciona muito bem.

Mas ultimamente notei um gargalo de performance no banco quando tenho alguns INSERTs concorrentes na tabela de acessos (tipo uns 9). SHOW PROCESSLIST no console do mysql não mostrava outra coisa que não fosse COMMIT na informação das threads. E as requisições acabam ultrapassando a minha meta de consumir, no máximo, 1 segundo.

Pesquisei um pouco a respeito de como otimizar isso e descobri o INSERT DELAYED, vamos tentar…

Primeiro mexi no banco, ALTER TABLE nome_da_tabela ENGINE=MYISAM; para converter a tabela de InnoDB para MYISAM.

Depois alterei a aplicação, copiando o método ActiveRecord::Base#create para meu model e renomeando-o para create_without_callbacks (eu uso before_create para setar alguns atributos e queria manter os callbacks funcionando)

E para ver se funcionou, no console do MySQL rode SHOW STATUS LIKEdelay’; e leia aqui o significado de cada variável

Estou ansioso para comparar os logs de produção :-)

Posted in , , , ,

Horário de Atendimento no Módulo Endereços

Posted by André Ribeiro Camargo Mon, 15 Feb 2010 15:01:00 GMT

Confesso que já fazia algum tempo que tinha vontade de implementar este campo no módulo de Endereços.

Na minha opinião, é um dado bem útil.

Agora, enquanto esperava Aline preparar o almoço (eu não cozinho, mas lavo louças), implementei esta funcionalidade.

Ainda não tenho clientes utilizando este recursos, mas, fica a dica.

Posted in , , ,

Links para compartilhamento de notícias

Posted by André Ribeiro Camargo Fri, 05 Feb 2010 01:47:00 GMT

A pedido de um cliente, incluí na página que exibe a notícia na íntegra os links para compartilhar o conteúdo no Twitter, Reddit, Google Bookmarks, etc

Frescurinhas, espero que seja útil para alguém…

Quer conferir? Aqui vai um exemplo…

Posted in , , , ,

geoip_city with region name

Posted by André Ribeiro Camargo Wed, 03 Feb 2010 16:34:00 GMT

Estou usando o GeoIPLite City para gerar relatórios por origem dos acessos, utilizando a gem geoip_city para consultar os dados na base de dados binária (que é muito mais rápida do que importar/consultar o CSV no banco de dados).

O problema é que a gem não retorna o nome da “região” (equivalente a nossa unidade federativa), então, criei um fork do projeto no github e fiz as alterações (que foram muito simples) para obter este dado aproveitando a API em C que é muito veloz. Para facilitar a instalação em produção, estou hospedando a gem atualizada no gemcutter.

Caso seja útil para alguém, fique a vontade para usar e me enviar remendos.

Posted in , , , ,

Melhoria (eu espero) no preenchimento dos campos de endereço no formulário de cadastro de consumidor dos shoppings

Posted by André Ribeiro Camargo Mon, 01 Feb 2010 01:09:00 GMT

Estava pensando: quando um consumidor informa um CEP que não está na base de dados, bem que o sistema podia esconder os SELECTs dos campos Cidade e Bairro, exibindo direto a caixa de texto para que o usuário digite os respectivos valores.

Alteração simples (só precisei alterar uma view RJS) e que me parece facilitar a vida do usuário (ele nem precisa pensar, só preencher). Então, está feito.

Depois de tanto tempo sem blogar, cheguei a conclusão que se eu for procurar um assunto para publicar, não vai rolar. Logo, de agora em diante, pretendo falar sobre o que tenho feito, assim otimizo o meu tempo (e posso ficar mais tempo com a Aline ou batendo bola).

Posted in , , , ,

Older posts: 1 2 3 ... 8