Boire ou coder ... Pourquoi choisir?
Publié le 10 mars 2009 23:00

Ruby & ActiveRecord : créer des migrations en dehors de Rails

Après avoir vu comment utiliser Active Record sans Rails, voyons maintenant comment créer des migrations de nos bases de données sans rails également. Tout d'abord, si vous ne savez pas ce qu'est une migration de base de données, je vous invite à vous documenter. Ici par exemple.

Maintenant allons y pour nos migrations en dehors de notre projet rails ! Pour exécuter celles-ci, nous allons utiliser Rake. Si vous en maitrisez les bases, c'est un peu mieux :)

Nous allons tout d'abord créer un dossier db/migrate dans lequel nous plaçerons tous nos fichiers de migrations. Créons la première, dans 001_create_users.rb

class CreateUsers < ActiveRecord::Migration
    def self.up
        create_table :users do |t|
            t.column :name, :string, :null => false
            t.column :password, :string, :null => false
        end
    end
    def self.down
        drop_table :users
    end
end

Ici, nous versionnons notre document en 001. Rien ne vous empêche cependant d'avoir vos propres règles de versionning ici afin de gérer la chose de manière plus efficace.

Mettons maintenant en place le rakefile qui exécutera nos migrations.

require 'active_record'
require 'yaml'</p>

<p>task :default => :migrate</p>

<p>desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
task :migrate => :environment do
    ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
end</p>

<p>task :environment do
    ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))
    ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a'))
end

La tâche "migrate" effectue notre migration. La tâche "environment" définit la connexion à la base de données et la manière de logger la chose. Vous pouvez bien évidemment le faire évoluer afin de gérer les migrations dans vos environnements de développement et de production.

Enfin il ne reste plus qu'à exécuter la migration en exécutant, en console

La création est correctement loggée et la base créée :) Si par la suite, vous créez un document 002_create_premissions.rb avec la définition d'une table permissions alors celle-ci sera créée de la même manière. Et comme migrate gère le versionning, si vous exécutez une seconde fois vos migrations, les premières ne seront pas réexécutées.

Si vous désirez cependant les réexécuter tout de même, il vous suffit de vider la base schema_migrations. Et de supprimer les bases déjà créées par vos migrations évidemment. Sans quoi vous aurez une belle erreur de table déjà existante.

Commentaires

Postez un commentaire

Markdown activé