【发布时间】:2015-09-10 01:01:16
【问题描述】:
为什么在安装某些插件后我必须重新启动 Rails 开发服务器,即使我可以更改我的代码并让它在不重新启动的情况下更新服务器?有什么区别?
【问题讨论】:
标签: ruby-on-rails plugins gem
为什么在安装某些插件后我必须重新启动 Rails 开发服务器,即使我可以更改我的代码并让它在不重新启动的情况下更新服务器?有什么区别?
【问题讨论】:
标签: ruby-on-rails plugins gem
当您安装新的 gems 时,您需要重新启动服务器以便 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'])
在标准的 Rails 应用程序中,有一个 Gemfile 声明了应用程序的所有依赖项。 config/boot.rb 将 ENV['BUNDLE_GEMFILE'] 设置为该文件的位置。如果 Gemfile 存在,则需要 bundler/setup。 Bundler 使用 require 来配置 Gemfile 依赖项的加载路径。
(来自the reference)
如果没有设置加载路径,Rails 不知道从哪里加载你的 gem。
默认情况下,每次请求都会重新加载您的所有应用程序代码,因此您可以看到您的更新。
如果您安装了插件/gem 并且正在对其进行更改(例如,您正在开发一个),则不会重新加载插件及其代码,因此您需要手动重新启动 Rails 服务器以便获取更新.
此行为由config.reload_plugins 配置变量设置,默认为false 以获得更好的性能,因为通常您更改应用程序代码并且插件未更改。如果您将其设置为true(在development.rb 中,因为它只在开发环境中是必需的),Rails 应该在每次请求时重新加载所有已安装的插件代码。当然,每个请求都会花费更长的时间,因为需要重新加载更多代码。
【讨论】:
通常,您仅在对服务器进行代码修补时才重新启动服务器,例如通过重定向、会话到期或数据库切换或任何类似的方式。如果您的插件影响服务器,那么您必须重新启动才能完全实现该插件。可能只是您安装的特定插件可能没有影响服务器。
【讨论】: