viernes, 22 de agosto de 2008

Passenger Nightmare

Yesterday I don't wait anymore: Passenger is so interesting .. I need try it.

Go!

I follow the install guide for Passenger using the native Ubuntu Linux package, and after some keystrokes, problems begins. The hell thing don't works...

After little time I found my gem tool has some bad behavior. Tried to update it. .... Horror: now my gem tool don't starts!. I'm lost: using rails you cannot go very long without gem. Glups!

After 12 hours of nightmare with St. Google & apt install, update, remove I get convinced the problem was using the apt repository http://apt.brightbox.net/.

I get all running now. My 'route to home' was:
  • Remove http://apt.brightbox.net/ from apt repository list
  • Uninstall ruby, rails, gems & passenger.
  • Install ruby, then rubygems, then update gem to last version (today is 1.2.0)
  • Install gems: rails, rake, etc.
  • Install passenger the 'gem way' and follow their console guide.
Passenger is great: I get Redmine running on apache + passenger at top speed!

Hope this can help

miércoles, 13 de febrero de 2008

DRY migrations: domains in migrations without SQLdomains in yor database

Wtih the new release 0.81 of domain-migrations plugin you can use sql-like domains in yor migrations and choose to 'inline' the column type in sql generation: you don't need support for "CREATE DOMAIN" sentence in your database engine. So, this:

create_domain :money, :numeric, :precision => 5, :scale => 2
crete_table :products do |t|
t.money :price

is fully equivalent to:

crete_table :products do |t|
t.numeric, :price, :precision => 5, :scale => 2


You don't need repeat the same column options anymore!

miércoles, 16 de enero de 2008

Using SQL domains in rails migrations

I like rails migrations a lot, but repeating common field declarations is not very DRY. The SQL language has 'domains' for capture these, but rails migrations don't support it ... until now!: I wrote domain-migrations plugin.

This plugin extend migrations with support for create_domain: now you can write migrations like this:

class CreateProjects < ActiveRecord::Migration
def self.up
create_domain :activedom, :string, :limit => 5,
:default => 'False',:null => false do
value.in('True', 'False') | value.in('Yes', 'No')
end

create_table :projects do |t|
t.string :name, :limit => 60
t.string :description, :limit => 300
t.activedom :active # *See that?*: activedom act
# as a new column type!
t.timestamps
end
end
# ...

This way we can write more DRY migrations :)
I hope you like it ...


Technorati Tags: , , ,

lunes, 9 de julio de 2007

Using New Gem Generator in Windows

If you need write a Ruby gem then you need Dr. Nic's newgem: you love it, sure!.
But if you try it on Windows, you get some little problem, something like:
tar zcvf foo-1.2.0.tgz foo-1.2.0
tar: Cannot fork: Function not implemented
appears in your console: newgem calls `tar` and `sudo` via the `sh` ruby command.

Dr. Nic suggested me use cygwin, but I prefered a more neat solution, more "native" can say. So, this is my way

1) Install bdstar from gnuwin32
2) Create tar.bat and sudo.bat. Ensure they are on your windows path.
3) In tar.bat put the line:
@bsdtar.exe %*
4) In sudo.bat put the line
%*
No, is not a mistake: `%*` does the magic. It means "copy all arguments". So it repeat whatosever you write after the 'sudo' command. Of course, this means you need administrator privileges in order to run some newgem features (local_deploy).

This works ok in Windows XP (it is my o.s.). If you are an Windows Vista user, maybe you prefer rewrite sudo.bat in a way that use the "run_as" Vista feature...


Technorati Tags: ,

jueves, 31 de mayo de 2007

Integrando con Ruby

Por fin he logrado aplicar Ruby para resolver un problema en un cliente. Se trataba de importar facturas y albaranes en xml a un ERP a traves de un ActiveX. Aún me falta mucho Ruby por aprender, pero animado por su simplicidad a la hora de enfocar los problemas, me predispuse para sufrir un poco en la aventura y ¿quien dijo miedo? :)

Primero use la utilidad olegen.rb, para obtener un wrapper en Ruby del ActiveX. Tras una breve consulta al "PickAxe" (gran libro, por cierto), en seguida estuve dialogando sin problemas con el ActiveX. Obtener un wrapper del ActiveX en Delphi tambien es sencillo, pero el uso en Ruby resulta desde luego un poco más simple.

A continuación habia que ser capaz de leer los ficheros xml y extraer los datos relevantes para importar a traves del ActiveX. Esto resulto realmente sencillo con rexml.rb, de manera que enseguida estaba ya metiendo documentos en el ERP.

Animado por el éxito, decidi aportar un pequeño extra: un buen log para supervisar el proceso de importación. De esta forma, no harian falta ventanas de usuario y el proceso de importacion podria incluso lanzarse como tarea programada sin intervención del usuario.

Naturalmente la elección parecia clara: log4r. Tuve que documentarme un poco en su uso y hacer alguna prueba simple, pero al poco tenia un log como nunca hubiera soñado al comienzo del proyecto: Podia enviar mensajes de progreso, error o traza a eleecion, y ademas podia enviar a la consola, a un fichero y por email. Y todo esto configurable en sencillo .xml, que incluso el cliente puede ajustar con un simple editor de texto, tanto los tipos de mensaje con los medios de envio.

Para hacer todo est escrito por mi suma solo 210 lineas en tres ficheros, más el pequeño xml de configuración. La conclusión solo puede ser una: Ruby es fantastico :)

Gracias Matz: programar vuelve a ser muy divertido!

lunes, 21 de mayo de 2007

Ya soy mayor!

Despues de un año aprendiendo todo el Ruby y Rails que puedo entre cliente y cliente, haber logrado aplicar Ruby en mi trabajo y tratar de devolver algo a la comunidad, he decidido que ya es hora de hacerme mayor del todo :) y abrir mi propio blog: tal vez mi modesta experiencia pueda servir a otros; aunque solo sea para no tropezar donde yo lo hice !.

Desde aquí trataré por tanto de aportar alguna cosilla extraida de mis más 12 años experiencia como consultor y formador en tecnologías de objetos, Delphi y C#, así como de esta immersión en el mundo Ruby en la que estoy metido por voluntad propia.

Espero que os resulte de alguna utilidad ...