我对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/