Ruby on rails Rails在不重新启动服务器的情况下加载类更改
我有一个类似这样的rails设置 app/service/TestService.rbRuby 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
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"