Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

after_initialize hooks sometimes get executed during initialization #1587

Closed
cameel opened this issue Jun 8, 2011 · 4 comments
Closed

after_initialize hooks sometimes get executed during initialization #1587

cameel opened this issue Jun 8, 2011 · 4 comments

Comments

@cameel
Copy link
Contributor

cameel commented Jun 8, 2011

I am using Cells plugin and I have noticed that in Rails 3.1.0 (checked with both RC1 and RC2) asset generation fails silently when the plugin is declared as dependency in Gemfile. There are no error messages in the log file or on the console (when running with rake assets:precompile). public/assets directory just does not get created.

I've dug into the issue and there doesn't seem to be anything wrong with Cells. The plugin just adds two initializers and this makes a deeper problem surface. Assets are not being compiled because config.assets.paths is still empty when Sprockets' :after_initialize hook is executed and that hook expects them to be there already. The initializer that sets the paths, surprisingly, runs after the hook.

The problem is that initializers from Rails::Application::Finisher (and in particular :finisher_hook that executes :after_initialize hooks) are not guaranteed to run after all the other initializers like they are expected to.

Finisher is properly placed at the end of the list when the list is returned by Rails::Application.initializers()

    def initializers
      Bootstrap.initializers_for(self) +
      super +
      Finisher.initializers_for(self)
    end

but the list is later tsorted in Rails::Initializable::Initializer.run_initializers():

    def run_initializers(*args)
      return if instance_variable_defined?(:@ran)
      initializers.tsort.each do |initializer|
        initializer.run(*args)
      end
      @ran = true
    end

Some initializers are constrained with :before/:after parameters that make tsort order them correctly. There are none in Finisher though.

Indeed, in an empty application (generated with rails new) everything is ok on my system: Finisher's initializers are lucky and stay at the end even after the tsort.

irb:001:0> initializers.tsort.each { |i| pp i.block };0                                                                                                                 
#<Proc:0x00000000b7df68@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:474>                     
#<Proc:0x00000000b7df68@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:474>                     
#<Proc:0x00000000b7dd10@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:486>                     
#<Proc:0x00000000b7dd10@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:486>                     
#<Proc:0x00000000b7d8d8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:496>                     
#<Proc:0x00000000b7d8d8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:496>                     
#<Proc:0x00000000b7d180@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:507>                     
#<Proc:0x00000000b7d180@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:507>                     
#<Proc:0x00000000b7ceb0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:511>                     
#<Proc:0x00000000b7ceb0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:511>                     
#<Proc:0x00000000b7be48@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:519>                     
#<Proc:0x00000000b7be48@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:519>                     
#<Proc:0x00000002d45380@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:10>       
#<Proc:0x00000002d452b8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:12>       
#<Proc:0x00000002d451f0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:19>       
#<Proc:0x00000002d45128@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:24>       
#<Proc:0x00000002d45060@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:44>       
#<Proc:0x0000000187b9e0@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:37>         
#<Proc:0x0000000187b710@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:44>         
#<Proc:0x0000000187b3f0@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:48>         
#<Proc:0x0000000187ae28@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:53>         
#<Proc:0x0000000187a680@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:66>         
#<Proc:0x00000001876918@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:74>         
#<Proc:0x00000001876080@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:81>         
#<Proc:0x00000002d44f98@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:54>       
#<Proc:0x00000002d44ed0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:63>       
#<Proc:0x00000002d44e08@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:67>       
#<Proc:0x000000019ac968@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/i18n_railtie.rb:21>  
#<Proc:0x00000001a35bf0@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:11>       
#<Proc:0x00000001a3a808@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:15>       
#<Proc:0x00000001a455c8@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:47>       
#<Proc:0x00000001f35a10@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_dispatch/railtie.rb:15>         
#<Proc:0x00000000744dc0@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:11>             
#<Proc:0x00000000744aa0@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:19>             
#<Proc:0x00000000744578@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:31>             
#<Proc:0x00000000743d58@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:39>             
#<Proc:0x0000000188b8b8@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:13>       
#<Proc:0x0000000188b520@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:17>       
#<Proc:0x0000000188b070@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:21>       
#<Proc:0x0000000188d870@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/sprockets/railtie.rb:15>               
#<Proc:0x0000000188aaf8@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:42>       
#<Proc:0x00000001090578@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:9>          
#<Proc:0x0000000108fbf0@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:13>         
#<Proc:0x0000000108f5b0@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:37>         
#<Proc:0x00000000f42608@/usr/lib/ruby/gems/1.9.1/gems/activeresource-3.1.0.rc2/lib/active_resource/railtie.rb:8>      
#<Proc:0x00000000ab36f0@/usr/lib/ruby/gems/1.9.1/gems/sass-rails-3.1.0.rc.2/lib/sass/rails/railtie.rb:16>             
#<Proc:0x00000000ab3448@/usr/lib/ruby/gems/1.9.1/gems/sass-rails-3.1.0.rc.2/lib/sass/rails/railtie.rb:36>             
#<Proc:0x00000000b7b498@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:524>                     
#<Proc:0x00000000b7b498@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:524>                     
#<Proc:0x00000000b7af20@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:536>                     
#<Proc:0x00000000b7af20@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:536>                     
#<Proc:0x00000000b79f08@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:542>                     
#<Proc:0x00000000b79f08@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:542>                     
#<Proc:0x00000000b78068@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:548>                     
#<Proc:0x00000000b78068@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:548>                     
#<Proc:0x00000002d5efd8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:6>         
#<Proc:0x00000002d5ef10@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:10>        
#<Proc:0x00000002d5ee48@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:22>        
#<Proc:0x00000002d5ed80@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:28>        
#<Proc:0x00000002d5ecb8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:36>        
#<Proc:0x00000002d5ebf0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:40>        
#<Proc:0x00000002d5eb28@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:44>        
#<Proc:0x00000002d5ea60@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:48>        
#<Proc:0x00000002d5e998@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:55>        
#<Proc:0x00000002d5e8d0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:62>        
#<Proc:0x00000002d5e808@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:69>        

But when we add Cells to the Gemfile, its initializers and the ones from from Rails::Engine (including :append_assets_path that sets config.assets.paths) are placed after Finisher's ones.

#<Proc:0x00000000cb6650@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:474>                   
#<Proc:0x00000000cb6650@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:474>                   
#<Proc:0x00000000cb64c0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:486>                   
#<Proc:0x00000000cb64c0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:486>                   
#<Proc:0x00000000cb6240@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:496>                   
#<Proc:0x00000000cb6240@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:496>                   
#<Proc:0x00000000cb5e80@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:507>                   
#<Proc:0x00000000cb5e80@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:507>                   
#<Proc:0x00000000caf828@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:511>                   
#<Proc:0x00000000caf828@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:511>                   
#<Proc:0x00000000caf2b0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:519>                   
#<Proc:0x00000000caf2b0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:519>                   
#<Proc:0x00000002debc08@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:10>     
#<Proc:0x00000002debd20@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:12>     
#<Proc:0x00000002debeb0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:19>     
#<Proc:0x00000002debff0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:24>     
#<Proc:0x00000002dec0e0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:44>     
#<Proc:0x0000000190b518@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:37>       
#<Proc:0x0000000190afc8@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:44>       
#<Proc:0x0000000190a7a8@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:48>       
#<Proc:0x0000000190a230@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:53>       
#<Proc:0x00000001900500@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:66>       
#<Proc:0x000000018ffdd0@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:74>       
#<Proc:0x000000018ff290@/usr/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0.rc2/lib/active_record/railtie.rb:81>       
#<Proc:0x00000002dec220@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:54>     
#<Proc:0x00000002dec4a0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:63>     
#<Proc:0x00000002dec680@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/bootstrap.rb:67>     
#<Proc:0x000000021b26f8@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/i18n_railtie.rb:21>
#<Proc:0x000000021b1d20@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:11>     
#<Proc:0x000000021b1b90@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:15>     
#<Proc:0x000000021b1a00@/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.1.0.rc2/lib/active_support/railtie.rb:47>     
#<Proc:0x000000021056b0@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_dispatch/railtie.rb:15>       
#<Proc:0x000000021f5fe8@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:11>           
#<Proc:0x000000021f5e58@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:19>           
#<Proc:0x000000021f5c00@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:31>           
#<Proc:0x000000021f5980@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_view/railtie.rb:39>           
#<Proc:0x0000000191d1a0@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:13>     
#<Proc:0x0000000191cf20@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:17>     
#<Proc:0x0000000191cc78@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:21>     
#<Proc:0x0000000191e550@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/sprockets/railtie.rb:15>             
#<Proc:0x0000000191c610@/usr/lib/ruby/gems/1.9.1/gems/actionpack-3.1.0.rc2/lib/action_controller/railtie.rb:42>     
#<Proc:0x00000000d9f148@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:9>        
#<Proc:0x00000000d9e5e0@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:13>       
#<Proc:0x00000000d9df78@/usr/lib/ruby/gems/1.9.1/gems/actionmailer-3.1.0.rc2/lib/action_mailer/railtie.rb:37>       
#<Proc:0x00000000cf3f78@/usr/lib/ruby/gems/1.9.1/gems/activeresource-3.1.0.rc2/lib/active_resource/railtie.rb:8>    
#<Proc:0x00000002aecae8@/usr/lib/ruby/gems/1.9.1/gems/sass-rails-3.1.0.rc.2/lib/sass/rails/railtie.rb:16>           
#<Proc:0x00000002aeca20@/usr/lib/ruby/gems/1.9.1/gems/sass-rails-3.1.0.rc.2/lib/sass/rails/railtie.rb:36>           
#<Proc:0x00000002e46b80@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:6>       
#<Proc:0x00000002e46c98@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:10>      
#<Proc:0x00000002e46d88@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:22>      
#<Proc:0x00000002e46ea0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:28>      
#<Proc:0x00000002e46f68@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:36>      
#<Proc:0x00000002e47080@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:40>      
#<Proc:0x00000002e47198@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:44>      
#<Proc:0x00000002e47288@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:48>      
#<Proc:0x00000002e473a0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:55>      
#<Proc:0x00000002e47490@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:62>      
#<Proc:0x00000002b53298@/tmp/cells/lib/cells/railtie.rb:8>                                                          
#<Proc:0x00000002b536f8@/tmp/cells/lib/cells/railtie.rb:14>                                                         
#<Proc:0x00000000caecc0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:524>                   
#<Proc:0x00000000caecc0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:524>                   
#<Proc:0x00000000cae608@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:536>                   
#<Proc:0x00000000cae608@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:536>                   
#<Proc:0x00000000cadfa0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:542>                   
#<Proc:0x00000000cadfa0@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:542>                   
#<Proc:0x00000000cada00@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:548>                   
#<Proc:0x00000000cada00@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/engine.rb:548>                   
#<Proc:0x00000002e475a8@/usr/lib/ruby/gems/1.9.1/gems/railties-3.1.0.rc2/lib/rails/application/finisher.rb:69>      
@cameel
Copy link
Contributor Author

cameel commented Jun 9, 2011

Update: it turns out that Cells does not break the initialization order just by accident but because it explicitly wants to run its initializers after Finisher's :set_routes_reloader.

From Cells' railtie:

module Cells
  class Railtie < Rails::Railtie
    options = {}
    options[:after] = :set_routes_reloader if Cells.rails3_1?
   ...
    <snip>
    ...
  end
end

While Cells might be better served by using :after_initialize hook rather than an initializer, this issue shows that :finisher_hook lacks some constraints. Other initializers, even those that are expected to run before it, may push it down in the execution order.

More details here: pull request 1602

@jonkessler
Copy link
Contributor

@cameel Is there still an issue, or can this be closed?

@cameel
Copy link
Contributor Author

cameel commented Apr 25, 2012

The issue with Cells is fixed - it has changed its initializers. I think that it's still possible to break initialization order though. There's nothing that forces finisher hook to be executed as the last initializer so some combinations of constraints may force other initializers to appear after it.

@carlosantoniodasilva
Copy link
Member

Since this issue was against 3.1 rc versions, and apparently the issue with Cells was fixed, I'm going to close this. Please let us know if you notice any other issue related to this in Rails, and make sure to test latest stable version in this case, and I'll be glad to reopen the discussion. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants