Rake migrate et uninitialized constant - comment perdre 1h pour un détail

Pour une fois, Ruby On Rails (RoR) était resté très laconique dans son message d’erreur :

1
2
3
4
[lipton]$ RAILS_ENV=production rake db:migrate VERSION=10
 
rake aborted!
uninitialized constant NewEmail

Pourtant mon fichier de migration en version 10 (010_new_email.rb) est tout ce qu’il y a de plus simple (ajout de 2 colonnes à une table) :

1
2
3
4
5
6
7
8
9
10
11
class NewEmailAddress < ActiveRecord::Migration
def self.up
add_column :users,  :new_email, :string
add_column :users,  :email_activation_code, :string, :limit =&gt; 40
end
 
def self.down
remove_column :users, :email_activation_code
remove_column :users, :new_email
end
end

Après plus d’une heure de recherche (et des solutions assez farfelues), enfin la délivrance :

1
[lipton]$ mv 010_new_email.rb 010_new_email_address.rb

N’oubliez jamais cette règle pour vos migrations rails : le fichier XXX_nom_de_la_classe.rb doit contenir une classe NomDeLaClasse qui hérite de ActiveRecord::Migration !

1
2
3
4
5
6
7
8
9
[lipton]$ RAILS_ENV=production rake migrate VERSION=10
/usr/bin/rake:17:Warning: require_gem is obsolete.  Use gem instead.
(in /home/.noodge/osilink/osilink)
== NewEmailAddress: migrating =================================================
-- add_column(:users, :new_email, :string)
-&gt; 2.1367s
-- add_column(:users, :email_activation_code, :string, {:limit=&gt;40})
-&gt; 1.6490s
== NewEmailAddress: migrated (3.7860s) ========================================

Tout va mieux ! Et le développement d’Osilink continue…

Articles relatifs



Ajouter un commentaire

Attention : les commentaires sont modérés, ils n'apparaissent donc pas tout de suite.


Creative Commons License