Bastos

let’s code!


minimagick, uma alternativa ao Rmagick

Eu tinha um problema ( como sempre ) que era fazer uploads de images no rails e manipular essas imagens. A 1º solução seria o Rmagick, mas pesquisando vi que ele gasta muita memória, e isso eu não tenho no meu vps! Então procurando encontrei o minimagick, ele faz praticamente o que o Rmagick faz, só que ele é mais rápido pois executa os comandos do mogrify ao invés de manipular com o ruby e a biblioteca embutida. Então parece ser bem mais rápido!

require 'rubygems'
require 'mini_magick'
file = 'test.jpg'
i = MiniMagick::Image.from_file(file)
i.thumbnail "100x100>"
i.write('manipulated.jpg')

E para o rails vou usar o plugin attachment-fu que pode usar tanto o Rmagick quanto o minimagick.

Uma vez me lembro de ter lido que na 37signals se usa algo parecido, eles executam via linha de comando o programa parar redimensionar as imagens.

Published by Bastos, on July 18th, 2007 at 11:23 pm. Filled under: rails, ruby | No Comments

Camping, a light ruby framework

Quando você precisa fazer uma simples aplicação, precisa de pouco código e muita produtividade, pensou em Rails? Pense em Camping também! Camping é um framework light, está para o Rails como o web.py está para o Django. Ele é simples, usa ActiveRecord para ORM e Markaby para linguagem de templates. Com uma estrutura simples você com um único arquivo faz sua aplicação toda, claro isso não é uma regra. Precisei criar uma ferramenta para editar arquivos php, a aplicação foi feita usando Ruby+Camping e tem até agora (1.0) 250 linhas. Ela roda usando Mongrel e um pequeno módulo para autenticação http. Usa menos recursos que o Rails e para uma aplicação que como essa não vai ter muitas requisições é perfeito, falta testar para aplicações com maio número de requisições.

Published by Bastos, on June 15th, 2007 at 4:49 pm. Filled under: camping, mongrel, rails, ruby | No Comments

Rake Task para backup de DB em Rails

Crie um backup.rake no lib/tasks :

require 'find'
namespace :db do
  desc "Backup the database to a file. Options: DIR=base_dir RAILS_ENV=production"
  task :backup => [:environment] do
    datestamp = Time.now.strftime("%Y-%m-%d")
    hourstamp = Time.now.strftime("%H-%M-%S")
    base_path = ENV["DIR"] || "db"
    backup_base = File.join(base_path, 'backup')
    backup_folder = File.join(backup_base, datestamp)
    backup_file = File.join(backup_folder, "#{RAILS_ENV}_#{hourstamp}_dump.sql")
    File.makedirs(backup_folder)
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    sh "mysqldump -u #{db_config['username']} -p#{db_config['password']} #{db_config['database']} > #{backup_file} ; bzip2 -z #{backup_file}"
    dir = Dir.new(backup_base)
    all_backups = dir.entries[2..-1].sort.reverse
    puts "Created backup: #{backup_file}.bz2"
  end
end

Execute com:

rake db:backup

Levemente modificada dessa aqui.
A minha task usa bzip, não apaga backups antigos e coloca os backups do mesmo dia em uma mesma pasta, cada arquivo tem a hora/minuto/segundo do backup.

Todo: Apagar pastas antigas em certa data

[update]Melhorada aqui.[/update]

Published by Bastos, on June 12th, 2007 at 6:12 pm. Filled under: rails, rake, ruby, tips | No Comments

Meu projetinho para aprender Rails

Para aprender Rails e fazer uma Mashup estou fazendo um Site legal que usa apis do last.fm e Youtube dentre outras. Ruby possui bibliotecas boas para muitas APIs existentes o que me faz escrever menos código! A Mashupestá quase pronta para um Beta :D, faltando só refazer alguns códigos que estão feios ou não ótimizados. Por falar em ótimização estou usando caches_action com time expire e usando uma class para cache de requests de urls que vi no Yahoo Developer. Aproveitando essa classe fiz uma para cache de qualquer coisa que depois coloco aqui no blog.

Published by Bastos, on June 11th, 2007 at 10:57 am. Filled under: 2.0, apache, rails | No Comments

Rails Rodando Com Apache usando Mod_Proxy e mod_rewrite

Esta eu com um belo problema, fazer o deployment de uma aplicação escrita em Rails em um Fedora3, solução usando 2 servidores HTTP:

  • Mongrel
  • Apache

Ai veio outro problema, já existe um site rodando no apache e vai ser mantido várias partes dele, mas outras vão ser substituídas pelas páginas rodando no mongrel, isso é, eu queria continuar com a mesma base de URL para o Mongrel e para o APACHE, se fosse um arquivo que exista no servidor apache, o apache serve, se não ele passa para o Mongrel, solução: .htaccess, mod_proxy e mod_rewrite

Vi algumas outras soluções mas nenhuma tão bem elegante quanto essa:

RewriteEngine   on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule     (.*) http://localhost:3000/$1 [P]

Pronto, ele passa o que não existe (!-f) para o servidor Mongrel que já está rodando em outra porta ([P]). Me surpreendi, não esperava que fosse tão fácil assim. Parte dessa solução vi aqui.

O ruim é que não sei se dá para usar com o mongrel clustes, mas isso vejo depois…

Published by Bastos, on May 31st, 2007 at 11:04 am. Filled under: apache, rails, ruby, sysadmin, tips | 2 Comments

Rails me impressionando

Estou mudando de emprego e estou precisando fazer um sistema CMS rápido. Descartei PHP nesse novo emprego! Fui no rumo do Ruby on Rails, não me arrependo. O software está saindo rápido, coisas como acts_as_tree e acts_as_list fazem meu menu ficar fácil de manipular, não vira um order by title simpes.

Olhem esse model:

class Page < ActiveRecord::Base
  acts_as_tree :order => "position"
  acts_as_list :scope =>  :parent

  validates_presence_of  :title
end

Published by Bastos, on April 24th, 2007 at 11:31 pm. Filled under: cms, projetos, rails, ruby | No Comments

Adoro quando os grandes falam o que não sabem

No site do terra hoje tinha uma matéria sobre tendências da computação para 2007, eles falaram de Rails, só ai eu já discordo, rails não é mais tendência, é realidade e já está no mercado… Mas o erro foi chamar Ruby on Rails de “Linguagem de programação”. Será que essas pessoas não lêem antes de escrever num portal grande desses?

Ruby on Rails
Ruby on Rails (RoR) é uma linguagem de programação orientada a objetos conhecida por sua sintaxe limpa. RoR é um projeto de código aberto que funciona tanto no Windows, quanto no Linux, quanto no Mac. A utilização desta ferramenta pode aumentar bastante a velocidade de desenvolvimento de uma equipe.

O site oficial do projeto Ruby on rails, http://www.rubyonrails.org/, tem uma série de tutoriais ensinando como criar rapidamente serviços de busca e publicação.

Você pode dizer que Rails tem uma DSL, mas não é uma linguagem de programação… newba

Published by Bastos, on March 2nd, 2007 at 2:52 pm. Filled under: imprensa, rails | 2 Comments

Rails

Estou aprendendo Rails, que por sinal é o melhor framework que já vi, e a linguagem Ruby é ótima, comprei até um livro. Bem não é fantásco escrever menos código repetitivo e ter mais tempo com coisas realmente importantes? O sacaffold é muito bom para prototipagem de sistemas e de resto to me dando muito bem sobre os trilhos…

Published by Bastos, on June 30th, 2006 at 9:42 am. Filled under: Uncategorized, code, rails, ruby | No Comments