Rails 5 中自动加载的变化

此文章需要简单了解一下什么是自动加载(autoloading),如果不熟悉,请参阅 Rails Guide 自动加载和重新加载常量一章。

Eagerload paths

Autoloading 是非线程安全的,因此我们需要确保在应用程序启动时加载所有常量。 在实际用到之前加载所有常量称之为“Eager loading”,这个概念在某种程度上与“Autoloading”相反。 “Autoloading”是指应用程序直到需要一个常量的时候才去加载它,也就是所谓的懒加载。 当需要用到一个类但却找不到的时候,才开始在自动加载路径(autoloading paths)查找并加载缺少的类。

eager_load_paths 包含一个目录列表,当应用程序在生产环境启动时,便加载所有在 eager_load_paths 中列出的目录的所有常量。

我们可以把一个目录添加到 eager_load_paths,如下所示:

# config/application.rb
config.eager_load_paths << Rails.root.join('lib')

Rails 5 的自动加载在生产环境下默认是禁用的

这个 Commit 使得 Rails 在生产启动时不再进行自动加载。

Rails 将从 eager_load_paths 加载所有的常量,但是当无法找到一个常量时,它将不会在 autoload_paths 中查找,并且也不会尝试去加载缺少的常量。

对于绝大多数应用程序,这应该不是一个问题。

在极个别的情况下,我们的应用程序仍然需要在生产环境中使用自动加载(“autoloading”),我们可以通过将enable_dependency_loading 设置为 true 来启用它,如下所示:

# config/application.rb

config.enable_dependency_loading = true
config.autoload_paths << Rails.root.join('lib')

文章翻译自 Rails 5 disables autoloading after booting the app in production

你可能感兴趣的:(Rails 5 中自动加载的变化)