Depurando Test/unit con Rails
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:
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"]}
Posted in Rails | no hay comentarios |
Charla taller de Rails en la UMA
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:
- Introducción
- MVC en Rails
- Entorno de desarrollo
- Creación de una aplicación
Espero que sea lo más interesante posible :)
Charla Introducción a Rails 3.0
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 Rails, Linux Malaga | no hay comentarios |
Fallo de Haml con Rails3
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
Rails 3 en Ubuntu Lucid con RVM
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 Rails, Ubuntu | no hay comentarios |
Instalando Rails 3 beta en Ubuntu
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:
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 Rails | no hay comentarios |
Gmate
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 Gnome, Rails | no hay comentarios |
Bonito bug en Rails 2.3.3
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 Rails | no hay comentarios |
Cucumber
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 Rails | no hay comentarios |
Dos cosillas rápidas de Rails
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 Rails | no hay comentarios |