Killall-9.NET

Blog de David Sedeño

Depurando Test/unit con Rails

Posted by David Sedeño 28/04/2011 at 13h47

A veces necesitamos depurar dentro de un test unitario en Rails. Para ello instalamos la gema ruby-debug en ruby < 1.9 y ruby-debug19 para ruby para esta versión de ruby. Podemos poner la linea:

gem 'ruby-debug19', :require => 'ruby-debug'

En el fichero Gemfile de nuestro proyecto Rails y ejecutar:

bundle install

En el test que queremos depurar añadir la línea:

require 'ruby-debug'

y justo antes de la linea que queremos depurar añadir la línea:

debugger

Una vez que el código llegue a esta línea nos saltará una consola rdb. En esta consola podemos arrancar una consola irb y así tener acceso a los objetos de nuestro test. Por ejemplo, en un caso real:

#ruby -Itest test/unit/event_test.rb
Loaded suite test/unit/event_test
Started
.F..test/unit/event_test.rb:54
assert @world_image.save
(rdb:1) @world_image
*** Unknown command: "@world_image".  Try "help".
(rdb:1) irb
ruby-1.9.2-p180 :001 > @world_image
 => #<Image id: nil, world_id: 558, created_at: nil, updated_at: nil, image_file_name: "avatar.jpg", image_content_type: "image/jpeg", image_file_size: 13170, image_updated_at: "2011-04-28 13:45:59", uploader_id: 1415>
ruby-1.9.2-p180 :002 > @world_image.save
 => false
ruby-1.9.2-p180 :003 > @world_image.errors
 => {:image=>["Paperclip::CommandNotFoundError", "Paperclip::CommandNotFoundError"]}

Con esta sesión vemo que el error proviene de Paperclip, que no encuentra un comando. Este ejemplo es significativo porque el test pasaba sin problemas en la máquina de los desarrolladores y no en el servidor de Integración Continua y con este sesión de debug dimos con el problema.

Posted in | no hay comentarios |

Charla taller de Rails en la UMA

Posted by David Sedeño 12/04/2011 at 14h12

Dentro de la semana cultural de la Facultad de Informática de la Universidad de Málaga, mañana daré una charla taller sobre Ruby on Rails.

La idea es que sea lo más práctica posible, estilo a la charla que ya dí el pasado Diciembre.  Miniguión:

  1. Introducción
  2. MVC en Rails
  3. Entorno de desarrollo
  4. Creación de una aplicación

Espero que sea lo más interesante posible :)

Posted in | 1 comment |

Charla Introducción a Rails 3.0

Posted by David Sedeño 29/11/2010 at 18h40

En la asociación Linux Málaga vamos a dar una series de charlas técnicas, la primera de ellas versará sobre Introducción a Rails que daré yo mismo.

Fecha: 11 de Diciembre 2010 

Hora: 11h.

Lugar: Centro Cívico de Málaga, Avda Los guindos 48

Posted in , | no hay comentarios |

Fallo de Haml con Rails3

Posted by David Sedeño 31/08/2010 at 16h14

Me he topado con un problema al actualizar un proyecto de Rails 3RC a la version 3 definitiva y Haml.  El error que suelta es:

 form_tag outputs directly to the Haml template.
Disregard its return value and use the - operator,
or use capture_haml to get the value as a String.
 

El problema lo han corregido en 1 día, sacando una nueva versión de Haml, la 3.0.18, pero puede dar algún que otro dolor de cabeza.

Para un proyecto ya existente con las versiones previas de Rails 3 lo mejor es poner en el Gemfile:

gem 'haml', ">=3.0.18"

y depues ejecutar

bundle install

 

 

Posted in | 1 comment |

Rails 3 en Ubuntu Lucid con RVM

Posted by David Sedeño 30/07/2010 at 17h45

Hace unos días salió la versión RC de Rails3. Para instalarla en una Ubuntu Lucid recien instalada (sin ruby ni nada) lo mejor es hacerlo a través de RVM.

 

Instalamos sofware básico:

sudo apt-get install build-essential git-core curl libsqlite3-dev libssl-dev libreadline-dev ncurses-dev libxml2-dev libxslt1-dev

Instalamos RVM:

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Añadimos a nuestro $HOME/.bashrc la linea:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Abrimos una nueva shell (o hacemos source .bashrc).

Instamos Ruby 1.9.2 (en estos momentos la versión instalada es la RC):
 

rvm install 1.9.2
 

Usamos esa versión de ruby:


rvm use ruby-1.9.2
 

Instalamos sqlite3 y rails con gem:
 

gem install sqlite3-ruby
gem install rails

Posted in , | no hay comentarios |

Instalando Rails 3 beta en Ubuntu

Posted by David Sedeño 18/02/2010 at 19h48

La semana pasada salió la versión beta de la esperada versión 3 de Rails. La estoy probando en una Ubuntu Karmic 9.10 virtualizada con KVM. Para instalar esta versión hay que instalar ruby1.9 (aunque es compatible con ruby 1.8) y unas cuantas gemas:

 

apt-get install ruby1.9 ruby1.9-dev irb1.9 rdoc1.9

wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
tar -xvf rubygems-1.3.5.tgz
cd rubygems-1.3.5
sudo ruby1.9 setup.rb
sudo ln -s /usr/bin/ruby1.9 /usr/bin/ruby
sudo ln -s /usr/bin/gem1.9 /usr/bin/gem

gem install tzinfo builder memcache-client rack rack-test rake erubis mail text-format thor bundler i18n
gem install rack-mount --version 0.4.1
gem install rails --pre

Una vez instalado y al hacer un proyecto de pruebas con: rails prueba; cd prueba; rails server pega unos cuantos petes:

:114:in `push_gem_version_on_load_path': undefined method `<=>' for nil:NilClass (NoMethodError)
Hay que poner la variable de entorno GEM_HOME correctamente:
export GEM_HOME=/usr/lib/ruby1.9/gems/1.9.0

Mejor ponerla en algún script de inicio como $HOME/.bashrc

undefined method `default_external=' for Encoding:Class (NoMethodError)

Con este fallo lo único que he encontrado es comentar la línea de la que se queja.

require': no such file to load -- ftools (LoadError)

sudo apt-get install rpl
cd /usr/lib/ruby1.9/gems/1.9.0/gems/
sudo rpl -R "require 'ftools'" "" *
Ah! y no se os ocurra poner como nombre de proyecto alguna palabra reservada como test, porque sino dará otro bonito error: (uninitialized constant Rack::Test::Application (NameError) if
application is named 'Test'. Stack trace:

 

Posted in | no hay comentarios |

Gmate

Posted by David Sedeño 05/11/2009 at 20h41

Después de instalar Ubuntu Karmic en una de mis máquinas me puse a instalar y configurar mis aplicaciones típicas.

Para programar uso Gedit con una serie de plugins. Buscando por ahí me topé con el proyecto Gmate que consiste en poner los plugins y configuraciones necesarias para emular al famoso TextMate de Mac, muy usado por los programadores Rails.

La verdad que mola mucho como deja Gedit.

Posted in , | no hay comentarios |

Bonito bug en Rails 2.3.3

Posted by David Sedeño 13/08/2009 at 08h36

El otro día me topé con un "bonito" bug de la última versión de Rails, la 2.3.3

El fallo en custión es del sistema de envíos de correos, ActionMailer, que no funciona cuando le pones un "From" con un nombre:

From "Fulano <noreply@fulano.com>"

El error que suelta:

Net::SMTPSyntaxError (501 <Fulano <noreply@fulano.com>>: "@" or "." expected after "Fulano"

Hay que aplicar este parche para hacerlo funcionar.

Un error bastante grave para una versión estable.

Posted in | no hay comentarios |

Cucumber

Posted by David Sedeño 23/05/2009 at 17h36

Mi punto flojo dentro del mundo de la programación Rails siempre ha sido el Testing. Siempre que me ponía a estudiarlo, los comienzos eran prometedores pero después resultaba bastante complejo y, por qué no decirlo, aburrido.

Hace poco quise ponerme al día en este campo y utilizar nuevas herramientas, como Cucumber. Más que para testing de aplicaciones, es una herramienta para realizar BDD (Behaviour Driven Development o Desarrollo orientado al comportamiento) y lo que es mejor, es divertida :)

Se utilizar lenguaje natural, por defecto inglés pero se pueden utilizar en otros idiomas como el español (aunque yo la uso en inglés) para describir características de nuestra aplicación. Por poner un ejemplo:

Given I'm logged in

And I there are products "ordenador", "teclado"

When I go to the list of products

Then I should see "ordenador"

And I should see "teclado"

Con esto, cucumber intenta parsear estas acciones o pasos con definiciones en ruby. La estructura está fijada en Given/When/Then. Given para poner la aplicación en un estado conocido, When para definir la acción realizada y Then para describir el resultado deseado.

En definitiva, una herramienta que me ha descubierto un campo nuevo en la forma de desarrollar aplicaciones web.

Para más información sobre cucumber, recomiento este railscasts sobre el tema.

Posted in | no hay comentarios |

Dos cosillas rápidas de Rails

Posted by David Sedeño 14/01/2008 at 07h26

Para saber la ip remota del cliente:
request.env['REMOTE_ADDR']

Para ejecutar un comando de la shell:
salida=%x{ ls -la }

Solo eso...

Posted in | no hay comentarios |