Actualizaci贸n de la versi贸n en migraciones de rieles

Si alguna vez necesita cambiar la versi贸n de un archivo de migraci贸n, hay una manera f谩cil de hacerlo:

mv {20121124202614,$(date +%Y%m%d%H%M%S)}_my_migration.rb

Con 20121124202614siendo la versi贸n actual de la migraci贸n.

Pero parece bastante largo de escribir y no muy 煤til de la forma en que est谩 escrito en este momento.

Podemos escribir un peque帽o script ruby 鈥嬧媝ara manejar esto por nosotros, algo como esto servir谩.

#!/usr/bin/env ruby

require 'fileutils'

ARGV
.each_with_index do |file, index|
next unless File.exists?( file )

filename_arr
= File.basename( file ).split '_'

# Make sure to add a couple of seconds
new_version
= Time.now.strftime( '%Y%m%d%H%M%S' ).to_i + index

# Change the version
filename_arr
[0] = new_version
new_name
= filename_arr.join '_'

new_file
= File.join File.dirname( file ), new_name

# Rename in filesystem
FileUtils.mv file, new_file
end

Col贸quelo en alg煤n lugar con su nombre $PATHsimilar o como desee y h谩galo ejecutable:~/binversion_change

chmod 755 ~/bin/version_change

Ahora tenemos un par de ventajas que no ten铆amos antes:

  • Podemos actualizar varios archivos como este:

ls db/migrate/* | xargs version_change

  • La lista puede estar en el orden que necesitemos y el script respetar谩 ese orden:

version_change 002_latest.rb 001_first.rb

  • Ruby es un lenguaje realmente elegante, por lo que actualizar el script ahora es muy sencillo.
  • Puede actualizar los nombres de archivo de cualquier archivo que siga el mismo formato que las migraciones de rails.