Help: A copy of ModelSecurity has been removed from the module tree but is still active!

635 views
Skip to first unread message

Dave Rothlisberger

unread,
Sep 15, 2008, 5:12:42 PM9/15/08
to Ruby on Rails: Core
Hi all, I'm posting this in the hope that someone who understands
rails dependencies can shed some light.

I've implemented a "ModelSecurity" module in the vein of Bruce Peren's
old ModelSecurity plugin (http://rubyforge.org/projects/model-
security/ ).

My ModelSecurity module lives in $RAILS_ROOT/lib. It is automatically
included into ActiveRecord::Base by a file in config/initializers. BTW
this is on rails 2.1 stable.

Everything works fine and dandy (including mongrel in development
mode) EXCEPT when I do "reload!" inside script/console -- then I get
the following error the next time any of my ModelSecurity methods are
called:

ArgumentError: A copy of ModelSecurity has been removed from the
module tree but is still active!

I have tried adding an "unloadable" declaration to my ModelSecurity
model, but it makes no difference.

I also tried adding the "unloadable" declaration to ActiveRecord::Base
itself (I was grasping at straws there), but that doesn't work either
-- it causes "reload!" to fail with:
NameError: uninitialized constant ActiveRecord::Base

Admittedly this isn't a huge problem (it only affects script/console)
but it is annoying because quitting and re-running script/console
takes ~12s on my system.

Cheers
Dave.

Frederick Cheung

unread,
Sep 15, 2008, 6:03:19 PM9/15/08
to rubyonra...@googlegroups.com

On 15 Sep 2008, at 22:12, Dave Rothlisberger wrote:

>
> Hi all, I'm posting this in the hope that someone who understands
> rails dependencies can shed some light.
>
> I've implemented a "ModelSecurity" module in the vein of Bruce Peren's
> old ModelSecurity plugin (http://rubyforge.org/projects/model-
> security/ ).
>
> My ModelSecurity module lives in $RAILS_ROOT/lib. It is automatically
> included into ActiveRecord::Base by a file in config/initializers. BTW
> this is on rails 2.1 stable.
>

Add that file to Dependencies.load_once_paths ?

Fred

Michael Koziarski

unread,
Sep 16, 2008, 5:00:58 AM9/16/08
to rubyonra...@googlegroups.com
> Hi all, I'm posting this in the hope that someone who understands
> rails dependencies can shed some light.

Basically the problem is that it's trying to remove that module, but
ActiveRecord::Base still references it. So your module has to live
outside of the reloading paths. Either in a plugin or some other path
you manually add to load_once_paths (as frederick mentioned).

If you want to reload this module you can simulate it with just:

load 'model_security.rb'

It's not strictly the same, but it will have the desired result for you.

--
Cheers

Koz

Dave Rothlisberger

unread,
Sep 16, 2008, 9:36:42 AM9/16/08
to Ruby on Rails: Core
Thanks guys, that worked a treat. It's nice to understand what's going
on under the hood. :-)

Dave.
Reply all
Reply to author
Forward
0 new messages