gpt4 book ai didi

ruby-on-rails - Ruby on Rails 3 - 为每个请求重新加载 lib 目录

转载 作者:行者123 更新时间:2023-12-03 05:45:24 34 4
gpt4 key购买 nike

我正在为 Rails 3 应用程序创建一个新引擎。正如您所猜测的,该引擎位于我的应用程序的 lib 目录中。

但是,我在开发它时遇到了一些问题。事实上,每次更改引擎中的某些内容时,我都需要重新启动服务器。

有办法避免这种情况吗?

我可以强制rails完全重新加载lib目录或特定文件及其对每个请求的要求吗?

感谢您的帮助:)

最佳答案

我无法让上述任何内容为我工作,所以我深入研究了 Rails 代码并想出了这个:

新文件:config/initializers/reload_lib.rb

if Rails.env == "development"
lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/**/*"]) do
Rails.application.reload_routes! # or do something better here
end

# For Rails 5.1+
ActiveSupport::Reloader.to_prepare do
lib_reloader.execute_if_updated
end

# For Rails pre-5.1
ActionDispatch::Callbacks.to_prepare do
lib_reloader.execute_if_updated
end

end

是的,我知道这很恶心,但这是一个黑客行为。可能有更好的方法来触发完全重新加载,但这对我有用。我的具体用例是一个安装到 Rails 路由的 Rack 应用程序,因此我需要在开发过程中重新加载它。

基本上,它的作用是检查/lib 中的任何文件自上次加载以来是否已更改(修改的时间戳),然后在发生更改时触发重新加载。

我可能还会提到我的 config/application.rb 中有这个

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

默认情况下,这会确保加载 lib 目录中的所有内容。

是的!

关于ruby-on-rails - Ruby on Rails 3 - 为每个请求重新加载 lib 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282655/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com