为什么安装插件后必须在 Rails 上重新启动 Ruby?

Why must you restart Ruby on Rails after installing plugins?

为什么在安装某些插件后我必须重新启动 rails 开发服务器,即使我可以更改我的代码并让它在不重新启动的情况下更新服务器?有什么区别?

通常,只有当您对服务器进行代码修改时才重新启动服务器,例如通过重定向、会话过期或数据库切换或类似的任何操作。如果您的插件影响服务器,那么您必须重新启动才能完全实现该插件。可能只是您安装的特定插件可能没有影响服务器。

当您安装新的 gem 时,您将需要重新启动服务器以便 Rails 接收它们,因为它们的加载路径是在 boot.rb 中配置的,它在应用程序启动时被处理:

# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) 

In a standard Rails application, there's a Gemfile which declares all dependencies of the application. config/boot.rb sets ENV['BUNDLE_GEMFILE'] to the location of this file. If the Gemfile exists, then bundler/setup is required. The require is used by Bundler to configure the load path for your Gemfile's dependencies.

(来自 the reference

如果没有设置加载路径,Rails 不知道从哪里加载你的 gem。

默认情况下,每次请求都会重新加载所有应用程序代码,因此您可以看到更新。

如果您安装了 plugin/gem 并且正在更改它(例如,您正在开发一个),插件及其代码不会重新加载,因此您需要手动重新启动 Rails 服务器,以便获取更新。

此行为由 config.reload_plugins 配置变量设置,默认为 false 以获得更好的性能,因为通常您更改应用程序代码而插件不变。如果您将它设置为 true(在 development.rb 中,因为它只在开发环境中是必需的),Rails 应该在每次请求时重新加载所有已安装的插件代码。当然,每个请求都会花费更长的时间,因为需要重新加载更多代码。