(Rails)重新加载“lib”文件而无需重新启动服务器......? [复制]

Posted

技术标签:

【中文标题】(Rails)重新加载“lib”文件而无需重新启动服务器......? [复制]【英文标题】:(Rails) Reloading "lib" files without having to restart server...? [duplicate] 【发布时间】:2010-11-10 00:09:47 【问题描述】:

Rails 中有什么方法可以让 ENV 重新加载“lib”文件而无需重新启动服务器?我正在使用“lib”模块中的一些类。但是,为了查看我的更改,我必须每次都重新启动服务器。我猜这就是 Rails 的工作方式,但在开发库文件和/或插件时非常乏味。

我肯定说错了....?

最好的

编辑 1

答案 1 和 2 都不适合我。相反,我收到了来自使用模块的控制器的错误。仅供参考,我的“lib/xmlitems”目录中有 3 个文件。我试图加载该子目录,然后我引用了“需要”所有其他文件的单个文件。我要单独加载所有文件吗?

【问题讨论】:

查看重复的目标,没有一个答案特别好。由于重复需要在目标中回答问题,因此我投票重新打开。 【参考方案1】:
module ActsAsReloadable
  def self.included(base)
    ActiveSupport::Dependencies.explicitly_unloadable_constants << base.name if Rails.env == 'development'
  end
end

要使用它,只需在您的 lib/* 文件中 include ActsAsReloadable 并在 config/application.rb 中添加 config.autoload_paths += %W(#config.root/lib)

【讨论】:

【参考方案2】:

有一个更简单的方法:只需添加

config.reload_plugins = true

到 development.rb

【讨论】:

这对我不起作用。【参考方案3】:

对于 Rails 3Rails 4.0,请更改 @txwikinger 的答案中给出的说明。在您的环境/development.rb 文件中,添加以下行:

ActiveSupport::Dependencies.autoload_paths << File::join( Rails.root, 'lib')
ActiveSupport::Dependencies.explicitly_unloadable_constants << '<my modules in lib>'

【讨论】:

当我这样做时,我使用了一个名为 ::Utils 的模块。当我运行我的代码时,它给了我一个错误,uninitialized constant ActionView::CompiledTemplates::Utils 效果很好,尽管我从附加到“explicitly_unloadable_constants”的字符串中删除了括号 这允许您在 lib 目录中重新加载类,已确认为 rails 4。谢谢! 请注意,explicitly_unloadable_constants 数组是一个常量(类名)数组,而不是文件名。还有一个麻烦:第二次重新加载时出现异常:Circular dependency detected while autoloading constant MyClass txwikinger 的回答已被删除

以上是关于(Rails)重新加载“lib”文件而无需重新启动服务器......? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 应用程序中重新加载 bean 配置 xml 文件而无需重新启动

如何在 rails 4 中重新加载路由 /config/routes/*?

重新加载 rails 初始化器

重新加载Spring Boot 上的更改,而无需重新启动服务

带有 Bootstrap 模态视图的 Rails 应用程序,包含表单、提交和消失模态视图,无需重新加载页面

JBoss 无需重新启动即可重新加载证书信任库