【问题标题】:How to auto-reload changes in a Rails Engine?如何在 Rails 引擎中自动重新加载更改?
【发布时间】:2025-11-29 04:30:01
【问题描述】:

我有一个可安装 Rails 4.1.0 的引擎。在引擎的 application_helper.rb 中:

module MyEngine
  module ApplicationHelper    
    def test123
      "test123"
    end    
  end
end

该方法在虚拟应用的视图general/index.html.erb 视图中:

%<= test123 %>

这行得通。但是,当我更改def test123返回的字符串并刷新浏览器时,新的字符串并没有显示出来。

当然,在虚拟应用程序中重新启动 Web 服务器会显示新字符串。

那么问题来了,如何在不重启网络服务器的情况下重新加载引擎的文件?

PS。我最好寻找一种使用 Rails 本身或解决此问题的特定 gem 的方法(但不是像 Guard、Spork 等通用 gem,尽管如果所有其他方法都失败了,我也会考虑这些。)

PPS。 SO上有类似的问题,但我都试过了(即使它们适用于Rails 2.x、3.x),它们对我没有用。

【问题讨论】:

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


    【解决方案1】:

    您应该明确要求依赖助手:

    # engines/my_engine/app/controllers/my_engine/application_controller.rb
    
    require_dependency "my_engine/application_helper"  # This is a key point!
    
    module MyEngine
      class ApplicationController < ::ApplicationController
        helper ApplicationHelper
        ...
    

    【讨论】:

      【解决方案2】:

      您可以使用zeus 之类的东西,这对观察项目文件的更改有很大帮助,除非在某些情况下,当您更改配置文件时它不起作用并且需要手动重新启动。

      但总的来说,在大多数情况下,这不仅仅是很棒

      【讨论】:

        最近更新 更多