Rake task with arguments and :environment

Just a quick tip:


File: gistfile1.rb
——————

desc "Rake task with arguments and :environment"
task :task_name, [:arg1, :arg2] => :environment do |t, args|
args.with_defaults(:arg1 => "Foo", :arg2 => "Bar")
puts "Hello, #{args.arg1}. Bye, #{args.arg2}."
end

Notes:

  • You may omit the #with_defaults call.
  • You have to use an Array for your arguments, even if there is only one.

So you will be able to pass arguments to your rake task:


File: gistfile1.txt
——————-

$ rake task_name["Moon","Sun"]
Hello, Moon. Bye, Sun.

Cuando el número de servidores que administras es pequeño, realizar...

Cuando el número de servidores que administras es pequeño, realizar tareas sobre estos no supone un gran problema. Pero cuando se empieza a superar el número de pestañas que entran en el terminal, empiezas a tener un problema. El uso de una administración centralizada te permite tener el control total de las configuraciones, paquetes y servicios que hay en cada servidor desde un punto central, aliviando así la carga de trabajo y manteniendo un entorno lo más homogéneo posible.

Para llevar a cabo esta tarea existen múltiples soluciones en el mundo del Software Libre. Estas semanas he dedicado parte de mi tiempo libre a rellenar esta laguna de conocimientos que tenía como sysadmin y el elegido ha sido Puppet.

Puppet es una herramienta de gestión centralizada de servidores, basado en Ruby y con un lenguaje declarativo muy parecido a este. Existen múltiples módulos para gestionar servicios como Apache, nginx, Postfix, Cron, …

[Lea más]
Almacenar la salida de un comando SQL en formato CSV

El formato CSV resulta muy cómo tanto de generar como leer, por eso muchos programas lo aceptan. Se trata simplemente de valores separados por comas (Comma-Separated Values). Vamos a ver como generar un fichero desde MySQL para almacenar datos. Para generar el fichero desde un comando SQL en MySQL deberemos indicar INTO OUTFILE con el [...]

Llevo dos semanas de baja, sin poder tampoco salir de casa. Razón por...

Llevo dos semanas de baja, sin poder tampoco salir de casa. Razón por la cual pensé en aprovechar el tiempo e intentar mejorar mis conocimientos en algo que nunca se me ha dado bien. La programación y más exactamente, la orientada a objetos. Así que me pillé un libro Ruby y Kindle en mano he ido aprendiendo y poniendo en funcionamiento conceptos que siempre me han sonado a chino. Si bien es cierto que sigo teniendo muchísimas deficiencias de conocimientos a nivel de programación (soy sysadmin, fuera de bash scripting casi nunca tengo que hacer nada), creo que he cogido una base que me permitirá ir mejorando poco a poco dentro de mis limitaciones ;)

Para poner en práctica todo lo aprendido, quise hacer algo relacionado con las redes sociales y MySQL. Y entonces recordé que un buen amigo y ex-compañero de trabajo llamado …

[Lea más]
Timestamps with Paperclip and S3

I’m using Paperclip (2.3.11) to upload images to S3 and, as some other people have pointed out (here and here), if the content of a file changes but its name remains the same (for example, if you recrop the image), the timestamp added by Paperclip to the end of image URL won’t change. Consequently, the browser thinks the image hasn’t changed, and will display the old version.

Being image a Paperclip::Attachment, the url method will return something like:

> image.class
 => Paperclip::Attachment
> image.url
 => "http://domain/filename?1305625852"

If the image’s content changes, but not the name, the timestamp won’t change. To fix this issue, I’ve added a new and simple processor: …

[Lea más]
Los cheatsheets suelen ser unas tablas resumen que siempre conviene...

Los cheatsheets suelen ser unas tablas resumen que siempre conviene tener a mano. Existen miles de CheatSheets por la web, para servicios como Apache, Mysql o aplicaciones como Vim. Por ejemplo, en http://www.cheat-sheets.org/ teneís una colección al alcance de un click. Lo que aquí voy a enseñar es un pequeño truco para que todos ellos sean accesibles desde la consola, ya que no siempre tenemos un navegador a mano :)

Aprovechando que intento aprender Ruby y los conceptos de POO, haremos uso de las Gem de Ruby para dotar de CheatSheets a nuestra shell. La Gem que nos dará la funcionalidad se llama Cheat y su instalación es sencilla:

# gem install cheat
Successfully installed cheat-1.3.0
1 gem installed
Installing ri documentation for cheat-1.3.0...
Installing RDoc documentation for cheat-1.3.0...

[Lea más]
Ficheros master.info y relay-log.info de MySQL

Cuando habilitamos un slave se generan en el datadir dos ficheros con datos: master.info y relay-log.info con información relativa a la replicación: Para el caso del relay log se trata de un fichero que almacena la posición leída respecto al master y a que punto ha llegado el slave. Mediante un strings podemos ver el [...]

Dimensionado del innodb_buffer_pool basado en el hit rate

Para bases de datos InnoDB medianas y grandes nos podemos encontrar que herramientas como mysqltuner nos indican problemas como los siguientes: [!!] InnoDB data size / buffer pool: 50.9G/6.5G Evidentemente en las recomendaciones de mysqltuner nos aparecerá: innodb_buffer_pool_size (>= 50G) Evidentemente si disponemos de un SGI Altix 3700 Bx2 con 384 GB de RAM no [...]

ERROR 1010 (HY000): Error dropping database (can’t rmdir ‘./db/’, errno: 17)

Al intentar borrar una base de datos de MySQL nos podemos encontrar con el siguiente error: mysql> drop database db; ERROR 1010 (HY000): Error dropping database (can't rmdir './db/', errno: 17) Nos esta diciendo que no puede borrar el directorio con el errno 17, si buscamos que significa el código 17 en errno.h vemos: # [...]

Selecting n random items from an array in ruby

Selecting n random items from an array in ruby is quite simple using the sort_by method provided by the Enumerable class. If we apply sort_by{ rand } to an array (or to a hash) we obtain the same array randomly ordered. If we only want n random items from the array, we can apply the slice method to the randomly orderer array to get the first n elements. For example, suppose we want to get 3 random items from my_array:

> my_array = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> my_array.sort_by{ rand }.slice(0..2)
=> [2, 9, 3]

You can find a more detailed explanation of how sort_by{ rand } works in …

[Lea más]