The begin rescue block is specifically to catch LoadError while loading
i18n gem. Other core extensions, under active support, should be
required outside of the begin rescue block.
In i18n gem, the following methods are defined.
- `Hash#except`
- `Hash#slice`
But if there are defined already, i18n skips these definitions.
So these definition by `active_support` are required before `require 'i18n'`.
In `i18n` gem, the method definition of `Hash#deep_merge!` is skipped
when it is already defined.
- warning: method redefined; discarding old deep_merge!
add lazy_load_hooks.rb, which allows us to declare code that
should be run at some later time. For instance, this allows
us to defer requiring ActiveRecord::Base at boot time purely
to apply configuration. Instead, we register a hook that should
apply configuration once ActiveRecord::Base is loaded.
With these changes, brings down total boot time of a
new app to 300ms in production and 400ms in dev.
TODO: rename base_hook