我对rails还不熟悉,因此在这个问题上陷入了困境。
我要做的是:
我需要调用服务A来检索一个idA,然后使用idA执行其他操作我在控制器中的动作类似于

class SomeController < ApplicationController
  def someAction
    idA = getIdAfromServiceA(config)
    doSomethingElseToServiceB(idA)
  end
end

由于serviceA的结果只依赖于config,因此一旦加载了配置,idA就不应该更改因此我想缓存idA。
我试图使用实例变量来缓存它,但没有成功(“getIdAfromServiceA被调用是打印在每个请求上的”)
class SomeController
  def getIdAfromServiceA(config)
    @IdA ||= getIdAfromServiceAviaHTTP(config)
  end

  private
  def getIdAfromServiceAviaHTTP(config)
     puts "getIdAfromServiceAviaHTTP is called"
     #make some http call
  end
end

我还尝试将它放入application.rb中,以便在启动时缓存它显示错误:undefined method 'getIdAfromServiceAviaHTTP' for SomeHelper:Module (NoMethodError)
module MyProject
  class Application < Rails::Application
    config.load_defaults 5.1
    require_relative 'relativePathToSomeHelperModule'
    config.idA  = SomeHelper.getIdAfromServiceAviaHTTP(config)
  end
end

所以我的问题是,什么是实现这一目标的好方法我在网上搜了好一阵子,但都白费了。你能帮我一下吗?谢谢!

最佳答案

/config/initializers/下创建一个ruby文件并将代码放在那里。
选项1:

# config/initializers/ida_from_api.rb

IDA = SomeHelper.getIdAfromServiceAviaHTTP(config)

然后可以在整个应用程序中使用IDA
选择2:
# config/initializers/ida_from_api.rb

Rails.configuration.idA = SomeHelper.getIdAfromServiceA(config)

然后可以在整个应用程序中使用Rails.configuration.idA查看Custom configuration了解更多详细信息。
fyi-应用程序启动时加载的initializers下的文件。

关于ruby-on-rails - 将http调用缓存在rails中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44734763/

10-10 19:30