Migration avec Rake

2009-08-13 12:47:56 UTC

Missing

On ne va pas le réperter, rake c'est le couteau suisse avec RoR, il regroupe plusieurs fonctions pour automatiser certaine tâches, comme : effectuer des tests, effectuer un dump de la structure de base de données, effacer la table des sessions, effacer les fichiers log, générer une documentation pour expliquer les fonctions de l'application, purger la base de données, effectuer un rapport sur le code de l'application... enfin la liste est longue, il faudra tout un manuel pour réunir toutes ces fonctions qu'on n'arrive plus à s'en séparer une fois adoptées.

Dans ce modeste post, je vais essayer de présente les fonctions de migration avec Rake, concernant la base de données, bien sur

Quand j'ai découvert Rails et que j'ai commencé à jouer au petit alchimiste avec, je changeais la structure de ma base de données manuellement avec des applications externes et parfois même avec phpmyadmin quand l'application est déjà sur le serveur de production. J'avais une vision restreinte (la faute à PHP), je passais à coté du système de migration de rake sans y faire attention. Par la suite, une lampe s'est allumé, et je me suis rendu compte de tout ce temps perdu dans l'ignorance.

Quand on génére des models ou bien des échaffaudage (scaffold), les fichiers de la structure de base de données s'empile au fur et à mesure dans le répertoire application/db/migrate/ à coté se trouve le fichier application/db/schema.rb qui regroupe la structure de la base de données avec la référence du derniers fichier empilé, en résumé la version actuelle de la migration de la base de données.

Voici un exemple d'un fichier dans la liste empilée qui servira à créer une table users

# fichier 20090813120000_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table "users", :force => true do |t|
      t.column :login,                     :string
      t.column :email,                     :string
      t.column :crypted_password,          :string, :limit => 40
      t.column :salt,                      :string, :limit => 40
      t.column :created_at,                :datetime
      t.column :updated_at,                :datetime
      t.column :remember_token,            :string
      t.column :remember_token_expires_at, :datetime
      t.column :activation_code, :string, :limit => 40
      t.column :activated_at, :datetime
      
    end
  end

  def self.down
    drop_table "users"
  end
end

On vois bien la nomination du fichier qui est en rapport direct avec le nom de la Classe. Deux méthodes se trouvent dans la classe : une pour la création, la seconde pour la destruction(on verra plus tard comment utiliser la fonction destrutrice)

Depuis la version 2.0 de Rails, il y a une nouvelle nomenclature plus "sexy" pour décrire la structure de la table:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users, :force => true do |t|
      t.string :login,email,                     :string
      t.string, :limit => 40,  :crypted_password, salt  
      t.string :remember_token
      t.datetime :remember_token_expires_at
      t.string, :limit => 40 :activation_code, :
      t.datetime :activated_at
      t.timestamps
      
    end
  end

  def self.down
    drop_table :users
  end
end

Ajouter un Commentaire

Auteur

Commentaire

-->