【问题标题】:Rails 3 engine and code reloading in development modeRails 3 引擎和代码在开发模式下重新加载
【发布时间】:2011-08-02 00:11:35
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你试过打开reload_plugins吗?

    # environments/development.rb
    config.reload_plugins = true 
    

    【讨论】:

      【解决方案3】:

      这有点 hack,但使用 require_dependency 并重新打开课程可能有效?

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-05
          • 2011-04-30
          • 2013-04-18
          • 1970-01-01
          • 2014-08-22
          • 1970-01-01
          • 2012-02-05
          相关资源
          最近更新 更多