Rails 3引擎和开发模式下的代码重载



我有一个rails 3引擎。在初始化器中,它需要来自某个文件夹的一堆文件。在这个文件中,引擎的用户定义代码、业务逻辑、配置引擎等。所有这些数据都静态地存储在我的引擎主模块中(在应用程序属性中)

module MyEngine
  class << self
    def application
      @application ||= MyEngine::Application.new 
    end
  end
end

我希望这些文件在开发模式下的每个请求上重新加载。(这样用户就不必重新加载服务器来查看他所做的更改)当然,我可以这样做而不是初始化器

config.to_prepare do
  MyEngine.application.clear!
  load('some/file')  
end

但是这样会有问题(因为在这个文件中定义的常量不会真正被重新加载)。

理想的解决方案是使我的整个引擎对每个请求都可重新加载,但我还没有找到这样做的方法。

这是一个老问题,但我认为将ActiveSupport::Dependencies.explicitly_unloadable_constants += %w[ GemName ]添加到您的开发中。

你试过打开reload_plugins吗?

# environments/development.rb
config.reload_plugins = true 

这是一个有点hack,但使用require_dependency和只是重新开放类可能工作?

# app/models/project.rb
require_dependency File.join(MyEngine::Engine.root, 'app', 'models', 'project')
class Project
end

对于那些只在Engine视图或I18n翻译上工作的人:这些部分默认情况下是自动加载的,不需要重新启动服务器!

相关内容

  • 没有找到相关文章

最新更新