如何在Rails中将服务目录添加到加载路径?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Rails中将服务目录添加到加载路径?相关的知识,希望对你有一定的参考价值。

在我的Rails项目中,我想在services文件夹中添加app目录并包含一些服务对象。

所以,假设我想添加app/services/foo/test.rb,它看起来像:

module Services
  module Foo
    class Test

    end
  end
end

在我的config/application.rb中,我补充说:

config.paths.add File.join('app', 'services'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'services', '*')]

但是,当我尝试在控制台中加载文件时,它不起作用:

⇒  rails c
Loading development environment (Rails 4.1.4)
[1] pry(main)> Services::Foo::Test
NameError: uninitialized constant Services

任何帮助我该如何解决这个问题?

答案

首先,app文件夹下的代码将在没有任何配置的情况下加载。

我认为问题是文件夹结构与您的类定义不匹配。

所以这个配置会起作用:

应用程序/服务/富/ test.rb

module Foo
  class Test
  end
end

我的线索是,例如我们有app/controllers/api/v1/users_controllers.rb,类常数将是Api::V1::UsersController,而不是Controllers::Api::V1::UsersController

更新

通常,我们通常使用FooServices而不是Foo,它更清晰,例如:

应用程序/服务/ foo_services / bar_parser.rb

module FooServices
  class BarParser
    # Do stuff
  end
end

所以我们理解foo_services文件夹中的每个类都是与Foo相关的服务

另一答案

添加新目录后,重新加载弹簧spring stop

以上是关于如何在Rails中将服务目录添加到加载路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何将导入的gem中的vue组件加载到rails中的lib目录?

如何在 Rails 应用程序中将法拉第请求正文添加到 Datadog 跟踪中

在rails中将对象上传到Amazon s3时添加Tag

如何在 Rails 6 中将我的 Ngrok 隧道动态添加到 config.hosts?

在 Rails 中将页面加载到内存中

Rails 动态 javascript 加载