require 'application' loads it twice

10 views
Skip to first unread message

Brandon Keepers

unread,
Jul 11, 2008, 9:22:00 AM7/11/08
to Ruby on Rails: Core
I've discovered that application.rb is being loaded twice in a couple
situations. It is not when simply running script/server, but it is
when running script/console and specs with rspec.

The first place it is always loaded is in the #to_prepare callback in
dispatcher.rb, using #require_dependency. The second time it's being
loaded is simply using "require 'application'" in console_with_helpers:
19, and in rspec_on_rails/lib/spec/rails.rb:3

I don't think it's expected behavior that requiring 'application'
loads it a second time.

Looking at the code, it appears that #require_dependency (which calls
#require_or_load) has two different mechanisms: :load or :require.
I'm curious if anyone knows the reasoning for this, and why :load is
the default. But even if it did use #require, #require_or_load expands
the path of the filename, so simply requiring application would still
re-load it.

I'm also wondering if #require_dependency is necessary in the
dispatcher. Would simply using #require do the trick?

I'm willing to pursue a patch to fix this, I just wanted to see if
anyone had any insights.

Thanks,
Brandon

PGP.sig

Michael Koziarski

unread,
Jul 11, 2008, 10:10:55 AM7/11/08
to rubyonra...@googlegroups.com
> I don't think it's expected behavior that requiring 'application' loads it a
> second time.

No, double requiring isn't expected.

> Looking at the code, it appears that #require_dependency (which calls
> #require_or_load) has two different mechanisms: :load or :require. I'm
> curious if anyone knows the reasoning for this, and why :load is the
> default. But even if it did use #require, #require_or_load expands the path
> of the filename, so simply requiring application would still re-load it.
>
> I'm also wondering if #require_dependency is necessary in the dispatcher.
> Would simply using #require do the trick?

require_dependency has two different load mechanisms to support the
reloading we do in development mode. But some of that code (including
require_dependency) is so old it predates active support, and I'm sure
there's some cruft in there. Perhaps it can be simplified.

> I'm willing to pursue a patch to fix this, I just wanted to see if anyone
> had any insights.

The correct fix is to use require_dependency 'application' as it works
with reloading. The double require is probably happening because
require_dependency normalises the path.

What are you doing in the console which triggers this? It's probably
a bug in rspec too.

> Thanks,
> Brandon
>

--
Cheers

Koz

Luigi Montanez

unread,
Jul 11, 2008, 1:42:44 PM7/11/08
to Ruby on Rails: Core
I'm experiencing the same exact problem (application.rb is loaded
twice when using script/console and running rspec). Using the latest
stable Rails (2.1.0) and RSpec (1.1.4). I'm looking into it but have
nothing helpful to contribute at the moment. This is on a project that
we're bringing up to speed after it's been dormant for a few months.

randy

unread,
Jul 11, 2008, 2:02:57 PM7/11/08
to Ruby on Rails: Core
I also have been puzzled by this. It can be reproduced in one minute:
Create a fresh rails app named 'fred': rails fred
Edit apps/controller/application.rb and insert a constant: X = 2
Type: script/console

Michael Koziarski

unread,
Jul 11, 2008, 4:30:07 PM7/11/08
to rubyonra...@googlegroups.com


http://github.com/rails/rails/commit/292501c7e01993faadfd953fd1b3154c470b65e2

That was easy :).

Does this fix it for everyone here?

--
Cheers

Koz

randy

unread,
Jul 11, 2008, 4:36:04 PM7/11/08
to Ruby on Rails: Core
It fixes it in script/console but not when I run rake spec.

Michael Koziarski

unread,
Jul 11, 2008, 4:37:51 PM7/11/08
to rubyonra...@googlegroups.com
That sounds like an rspec problem. Is there a require 'application'
somewhere in their source?

On Fri, Jul 11, 2008 at 10:36 PM, randy <randy.j...@gmail.com> wrote:
>
> It fixes it in script/console but not when I run rake spec.
> >
>

--
Cheers

Koz

randy

unread,
Jul 11, 2008, 4:48:53 PM7/11/08
to Ruby on Rails: Core
Yes, the same line does appear in rspec-rails/lib/spec/rails.rb
And when I make Koz's fix, it does fix it for "rake spec"

Thanks!!

Michael Koziarski

unread,
Jul 11, 2008, 4:50:11 PM7/11/08
to rubyonra...@googlegroups.com
On Fri, Jul 11, 2008 at 10:48 PM, randy <randy.j...@gmail.com> wrote:
>
> Yes, the same line does appear in rspec-rails/lib/spec/rails.rb
> And when I make Koz's fix, it does fix it for "rake spec"

awesome. Remember to submit it upstream :)


--
Cheers

Koz

Brandon Keepers

unread,
Jul 11, 2008, 8:28:11 PM7/11/08
to rubyonra...@googlegroups.com
PGP.sig
Reply all
Reply to author
Forward
0 new messages