Closed sunny closed 3 years ago
Oh, interesting. Do you think Rails initializers registered by gems like https://github.com/k0kubun/hamlit/blob/df0af702cec7fb3bdb6ee42e10e5639bac95e102/lib/hamlit/railtie.rb#L7 are executed after application-provided initializers? (I'm just not sure)
I’m not sure how the order is determined, but in my case adding puts __FILE__
inside initializer :hamlit do |app|
(in Hamlit's railtie) as well as inside my initializer, I get the following:
$ bin/rails runner 'puts "Done"'
/Users/sunny/code/cults/config/initializers/hamlit.rb
/Users/sunny/.rbenv/versions/2.5.7/lib/ruby/gems/2.5.0/gems/hamlit-2.14.2/lib/hamlit/railtie.rb
Running via Spring preloader in process 77342
Done
Hmm, I've just rails new
-ed and got a different result
$ bin/rails -v
Rails 6.0.3.4
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]
$ bin/rails runner 'puts "Done"'
/home/k0kubun/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/hamlit-2.14.2/lib/hamlit/railtie.rb
/home/k0kubun/tmp/railsapp/config/initializers/hamlit.rb
Done
Could you put this code in each your file file?
puts "[#{__FILE__}]"
puts caller
puts
Also I'd like to check if you have Bundler.require(*Rails.groups)
in config/application.rb, require_relative 'application'
in config/environment.rb, and Rails.application.initialize!
next to it in config/environment.rb.
Please confirm whether Hamlit::Railtie
is defined in your config/initializers/hamlit.rb
or not too.
Could you put this code in each your file file?
Also I'd like to check if you have
Bundler.require(*Rails.groups)
inconfig/application.rb
require_relative 'application'
inconfig/environment.rb
andRails.application.initialize!
next to it inconfig/environment.rb
.
Please confirm whether
Hamlit::Railtie
is defined in yourconfig/initializers/hamlit.rb
or not too.
✅ Yep, it is defined there.
Oh, I think this brings us to a lead. The previous gem in my Gemfile is reform-rails
and its railtie is defined as being after: :load_config_initializers
. Perhaps therefore that is why hamlit
is moved to after the config initializers as well, since it simply follows having no before
or after
.
Instead of a documentation change this is now a better fix and I learned a thing or two about initializers in Rails 🎉
Oh, I think this brings us to a lead. The previous gem in my Gemfile is reform-rails and its railtie is defined as being after: :load_config_initializers. Perhaps therefore that is why hamlit is moved to after the config initializers as well, since it simply follows having no before or after.
Interesting! https://github.com/rails/rails/blob/v6.0.0/railties/lib/rails/initializable.rb#L90
Your patch makes sense. Thank you!
In order not to have to
require 'hamlit/rails_template'
, make sure it is called beforehand.Minor documentation fix that I needed to useRailsTemplate
in an initializer. (hamlit 2.14.2, hamlit-rails 0.2.3, rails 6.0, Ruby 2.5.7.)