Rails 3引擎和代码在开发模式下重新加载

时间:2011-04-09 08:29:34

标签: ruby-on-rails ruby ruby-on-rails-3 gem rails-engines

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

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您是否尝试过reload_plugins

# environments/development.rb
config.reload_plugins = true 

答案 2 :(得分:0)

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

# app/models/project.rb

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

答案 3 :(得分:0)

对于那些仅处理Engine视图或I18n翻译的人:默认情况下这些部分是自动加载的,无需重启服务器!