Problème en surchargeant une méthode


#1

Bonjour,

je débute sous rails et je viens de commencer un projet avec
PostgreSQL et des tables avec foreign key. Lorsque j’essaye de peupler
mes tables avec rake db:fixtures:load, j’obtiens l’erreur suivante :

PGError: ERROR: permission denied: “RI_ConstraintTrigger_33306” is a
system trigger

Quelques recherches sur Google m’ont amenée vers
http://dev.rubyonrails.org/ticket/9981
et http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error .
Le problème viendrait du fait que lors de l’insertion massive de
données, rails supprime les triggers pour les remettre ensuite, afin
de ne pas générer d’éventuels problèmes d’intégrité référentielle. Or
l’utilisateur SQL qui execute les requêtes n’a pas le droit de
supprimer certains triggers. Les 2 sites proposent de modifier la
méthode disable_referential_integrity de PostgreSQLAdapter ainsi :

module ActiveRecord
module ConnectionAdapters
class PostgreSQLAdapter < AbstractAdapter
def disable_referential_integrity(&block)
transaction {
begin
execute “SET CONSTRAINTS ALL DEFERRED”
yield
ensure
execute “SET CONSTRAINTS ALL IMMEDIATE”
end
}
end
end
end
end

et de rajouter dans le fichier environment.rb la ligne : require
‘mon_fichier.rb’. J’ai mis ce fichier dans le répertoire lib/. Quand
je ré-exécute rake db:fixtures:load, j’ai l’erreur suivante :

uninitialized constant
ActiveRecord::ConnectionAdapters::AbstractAdapter

Je dois avouer que je ne sais pas du tout par où prendre ce nouveau
problème… (je n’ai pas une grosse expérience en ruby non plus !)
Quequu’un pourrait-il m’aider ?

Merci !


#2

olfhen wrote:

et de rajouter dans le fichier environment.rb la ligne : require
‘mon_fichier.rb’. J’ai mis ce fichier dans le répertoire lib/. Quand
je ré-exécute rake db:fixtures:load, j’ai l’erreur suivante :

Par curiosité, tu as mis le require à la fin ou au début de ton fichier
environnement.rb. Car si tu le met au début. il n’y aura pas eu de load
de Rails :slight_smile:


Cyril M.
http://blog.shingara.fr


#3

On 21 nov, 16:11, Cyril M. removed_email_address@domain.invalid wrote:

olfhen wrote:

et de rajouter dans le fichier environment.rb la ligne : require
‘mon_fichier.rb’. J’ai mis ce fichier dans le répertoire lib/. Quand
je ré-exécute rake db:fixtures:load, j’ai l’erreur suivante :

Par curiosité, tu as mis le require à la fin ou au début de ton fichier
environnement.rb. Car si tu le met au début. il n’y aura pas eu de load
de Rails :slight_smile:

Je l’ai mis tout à la fin.


#4

Bonjour,

On 22 nov, 07:52, “Jean-François Trân” removed_email_address@domain.invalid wrote:

Enlève le require à la fin de ton environment.rb et déplace ton
fichier (qui contient le monkey patch) de lib/ vers config/initializers.
Relance.

Impeccable. Ca a marché. Merci.

Encore une chtite question : pourquoi est-ce que ça ne marchait pas de
la façon dont s’était indiqué dans la page web que j’avais vu ?


#5

Le 24 novembre 2008 09:25, olfhen a écrit :

Enlève le require à la fin de ton environment.rb et déplace ton
fichier (qui contient le monkey patch) de lib/ vers config/initializers.
Relance.

Impeccable. Ca a marché. Merci.

Encore une chtite question : pourquoi est-ce que ça ne marchait
pas de la façon dont s’était indiqué dans la page web que j’avais vu ?

Ce n’est pas très clair pour moi non plus, j’investiguerai un peu
plus à l’occasion, en même temps j’ai envie de dire que c’est
un peu le principe des tutoriels, c’est le syndrôme “chez moi
çamarche”.

– Jean-François.


Rails Party à Paris dimanche 30 novembre !
Infos: http://rubyfrance.org/evenements/rails-party-2008/
Inscriptions: http://railsparty.ror.bearstech.com

http://twitter.com/underflow_


#6

Le 21 novembre 2008 15:55, olfhen a écrit :

[monkey patch code]

et de rajouter dans le fichier environment.rb la ligne : require
‘mon_fichier.rb’. J’ai mis ce fichier dans le répertoire lib/. Quand
je ré-exécute rake db:fixtures:load, j’ai l’erreur suivante :

uninitialized constant
ActiveRecord::ConnectionAdapters::AbstractAdapter

Enlève le require à la fin de ton environment.rb et déplace ton
fichier (qui contient le monkey patch) de lib/ vers config/initializers.
Relance.

Si ça ne marche pas, supposons que tu aies un modèle Foo
rajoute au début du fichier contenant lemonkey patch : Foo

-- Jean-François.


Rails Party à Paris dimanche 30 novembre !

http://twitter.com/underflow_