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

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

具体来说,在添加辅助方法时,我必须重新启动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 

我对引擎仍然很陌生,上面的很多代码都取自别人的工作,所以请耐心等待我。 任何暗示正确的方向都是非常感谢。

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

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

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

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

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

请参阅rails指南以及此Rails引擎代码的含义:config.to_prepare&method(:activate).to_proc

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