6

我有一个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

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

理想的解决方案是让我的整个引擎在每次请求时都可以重新加载,但还没有找到方法。

4

4 回答 4

1

这是一个老问题,但我认为添加ActiveSupport::Dependencies.explicitly_unloadable_constants += %w[ GemName ]到你的 development.rb 应该可以解决问题。

于 2012-03-06T08:20:27.840 回答
0

你试过开启reload_plugins吗?

# environments/development.rb
config.reload_plugins = true 
于 2012-03-20T16:44:29.523 回答
0

对于那些只处理引擎视图或 I18n 翻译的人:这些部分默认自动重新加载,无需重新启动服务器!

于 2013-02-01T17:13:47.083 回答
0

它有点hack,但使用require_dependency并重新打开课程可能会奏效吗?

# app/models/project.rb

require_dependency File.join(MyEngine::Engine.root, 'app', 'models', 'project')
class Project
end
于 2012-04-15T20:21:19.870 回答