Ruby on rails Rails在不重新启动服务器的情况下加载类更改

Ruby on rails Rails在不重新启动服务器的情况下加载类更改,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个类似这样的rails设置 app/service/TestService.rb class TestService def self.doSomething return 'Hello World!' end end 我正在控制器中使用此文件 require 'TestService' class IndexController < ApplicationController def index @message = TestService.d

我有一个类似这样的rails设置

app/service/TestService.rb

class TestService

  def self.doSomething
    return 'Hello World!'
  end

end
我正在控制器中使用此文件

require 'TestService'

class IndexController < ApplicationController

  def index
    @message = TestService.doSomething
  end

end

但该应用程序似乎没有接收到TestService类的更新。如何修复此问题,以便在不重新启动服务器的情况下显示TestService类中的更改。

您说您的文件位于
app/server
,但您正在自动加载
app/service
。哪个是正确的


将文件重命名为
app/service/test\u service.rb
,自动加载程序应该可以工作。Rails在您的自动加载路径中查找以蛇形开头的文件名。一旦自动加载行为正确,您也不需要使用手册
require

在尝试加载包含可重新加载常量的文件时,不要使用
require

通常,您不需要做任何特殊的事情就可以使用该常数。您只需直接使用常量,而不必使用
require
或其他任何东西

但是,如果您想让自己的代码一清二楚,
ActiveSupport
为您提供了一种不同的方法,您可以使用它来加载这些文件:
require\u dependency

require_dependency 'test_service'

class IndexController < ApplicationController
  ...
end

因此,如果常数是
TestService
,那么glob就是
app/*/test\u service.rb
。因此,在
app/services/test\u service.rb
中保持不变将起作用,正如
app/models/test\u service.rb
一样,尽管后者是一种糟糕的形式。如果常量为
SomeModule::SomeOtherModule::SomeClass
,则需要将文件放入
app/*/some\u module/some\u other\u module/some\u class.rb

添加require\u依赖项。。。似乎有效。但是,如果将其删除,则不会加载对TestService的更改。请撤消对
自动加载路径的更改。不要设置那个配置,我已经删除了。如果控制器中没有require或require_依赖项,则获取此错误。未初始化的常量IndexController::TestServices在摘要中,删除
require
,将文件名更改为
snake\u case
filename_glob = "app/*/" + the_constant.to_s.underscore + ".rb"
filename_glob = "app/*/" + the_constant.to_s.underscore + ".rb"