这描述的是 Rails 的一个核心特性,与 Discourse 本身并无直接关联。
在 Rails 中,所有初始化器(initializers)仅在 Rails 启动时加载。因此,任何基于初始化器(例如 after_initialize)执行代码的插件,只会在 Rails 启动或重启时执行(如果我说错了请指正)。
我之所以熟悉这一点,是因为我目前正在为客户构建一个 Rails 应用程序,并为各种任务(布尔值、静态数组等)编写了许多初始化器。在每种情况下,如果我们更改了 Rails 初始化器中的任何代码,都必须重启 Rails(在开发环境中执行“按 Ctrl+C,然后运行 rails s”),才能使初始化器中的新值生效并加载到 Rails 应用中。
如果我说错了请指正!谢谢。
有时,我认为这可能会让一些 Discourse 插件开发者感到困惑,尤其是那些主要专注于 Discourse 插件开发、而不太熟悉通用 Rails 应用程序的开发者。当我们说"Discourse 这样做”或"Discourse 那样做”时,实际上我们描述的可能是 Rails 的核心功能或特性,而这些特性并不一定专门属于 Discourse。
Rails 6 仅在 Rails 启动时读取 config/initializers 目录(以及所有 config/initializers 子目录)中的所有文件。同样(关于插件我不完全确定),依赖 after_initialize 的 Discourse 插件代码(请任何人确认一下)只会在 Rails 启动或重启时由 Rails 应用加载,因为这是 Rails 启动过程的一个基本特性。
我猜这里所有从事 Rails 开发的人都已经知道这些了。我只是最近才开始了解这些细节(而且感觉要成为专家还有很长的路要走),因为我目前正在每天处理一个 Rails 应用程序。顺便说一句,我现在真希望自己在十年前就开始学习 Rails,因为从 LAMP 开发背景转过来后,我发现 Rails 要好得多(既简单又有趣)。
今年我已经成为了 Rails 的忠实粉丝,我非常感激 Discourse 引领我走上了这条道路。
再次强调,如果我说错了请指正!谢谢。我正在努力让自己在 Rails 方面更加专业。