Rails引擎:仅在重新启动服务器时重新加载助手

时间:2012-08-30 07:21:46

标签: ruby-on-rails helper rails-engines

我目前正在尝试将功能转移到引擎中。到目前为止它运行良好,但我有点困惑为什么引擎的某些部分总是在发生变化时自动重新加载,而有些部分则没有。

具体来说,在添加帮助器方法时,我必须重新启动Rails服务器,否则Rails不会看到它。这是正常的行为吗?这是我的引擎的相关部分:

组件/ iq_list.rb

# encoding: utf-8
require 'iq_list/engine'

# Load IqList Modules
module IqList
  extend ActiveSupport::Autoload
  autoload :Helpers
  autoload :Models
  autoload :Controllers
end

组件/ iq_list / engine.rb

module IqList
  class Engine < ::Rails::Engine
  end
end

组件/ iq_list / helpers.rb

module IqList
  module Helpers
    extend ActiveSupport::Autoload
    autoload :IqListHelper
  end
end

组件/ iq_list /助手/ iq_list_helper.rb

module IqList
  module Helpers
    module IqListHelper
      def some_method
        # ...
      end
    end
  end
end

我对引擎还很陌生,上面的很多代码都取自别人的工作,所以请耐心等待我。任何暗示正确的方向都受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

看起来你可能正在用Engines咆哮错误的树。如果你想简单地实现关注点分离,你可能只想制作一些普通的旧ruby类并将它们粘贴在lib/中(当然是以有组织的方式)。

引擎将与您的“当前”项目分开开发,可能是通过宝石引入的。包含宝石的更改将需要重新启动服务器AFAIK。

答案 1 :(得分:1)

如果您需要在每次请求时重新加载引擎中的代码,则需要将其放在引擎初始化代码的to_prepare块中

module IqList
  class Engine < ::Rails::Engine
    config.to_prepare do
     ApplicationController.helper(IqListHelper)
    end
  end
end

to_prepare块中的代码保证在生产中运行一次,每次都在开发中。

请参阅导轨指南以及 What does this Rails Engine code mean: config.to_prepare &method(:activate).to_proc

http://robots.thoughtbot.com/tips-for-writing-your-own-rails-engine