导轨中的低级缓存问题

时间:2017-10-27 08:53:05

标签: ruby-on-rails caching

我在rails中有一些缓存问题。我不知道该如何设置它。 这是代码:

submit_key = nil
pairs_email = Hash.new

pairs_type = Rails.cache.fetch("cache_typeform", :expires_in => 1.day) do
  (0..9).each do
    if submit_key.present?
      url = "https://api.typeform.com/forms/#{typeform_id}/responses?page_size=1000&until=#{submit_key}"
      response = RestClient.get url, {:Authorization => 'Bearer XXXXXXXXXXX'}
      parsed = JSON.parse(response.body)
    else
      response = RestClient.get "https://api.typeform.com/forms/#{typeform_id}/responses?page_size=1000", {:Authorization => 'Bearer XXXXXXXXXXXXXXX}
      parsed = JSON.parse(response.body)
    end
    parsed['items'].each do |item|
      pairs_email[item['hidden']['email']] = item['token'] if item['hidden']['email'].present?
    end
    submit_key = parsed['items'][-1]['submitted_at'].chop
  end
end

然后它应该返回一个包含电子邮件和ID的对,然后使用这些对来获取更多信息。但是,没有任何回报。

有人可以告诉我在我的代码中我做错了什么吗?我错过了什么地方吗?

更新

我想使用我的缓存从typeform API获取信息:

results = Hash.new
if pairs_email[email].present?
  url =  "https://api.typeform.com/v1/form/#{typeform_id}?key=#{ENV['TYPEFORM_API_KEY']}&token=#{pairs_email[email]}"

  response = RestClient.get(url)
  parsed = JSON.parse(response.body)
  results["email"] = parsed["responses"][0]["hidden"]["email"] # Email
  results["first_name"] = parsed["responses"][0]["answers"]["textfield_25078009"] # prénom
  results["last_name"] = parsed["responses"][0]["answers"]["textfield_25078014"] # nom
  results["phone_number"] = parsed["responses"][0]["answers"]["textfield_25444504"] #N°
  results["job"] = parsed["responses"][0]["answers"]["textfield_24904749"] # métier
  results["status_legal"] = parsed["responses"][0]["answers"]["list_24904751_choice"] # statut légal ?
  results["birthdate"] = parsed["responses"][0]["answers"]["date_24904754"] # Date de naissance
  results["zipcode"] = parsed["responses"][0]["answers"]["number_24904755"] # Code postal
  results["has_partner"] = parsed["responses"][0]["answers"]["yesno_53894471"] # has_partner
  results["children"] = parsed["responses"][0]["answers"]["list_53894494_choice"] # Nombre d'enfants
  results["optical_option"] = parsed["responses"][0]["answers"]["list_24904752_choice_32209601"] # optical_option
  results["dental_option"] = parsed["responses"][0]["answers"]["list_24904752_choice_32209602"] # dental_option
  results["sick_15d"] = parsed["responses"][0]["answers"]["list_24904752_choice_32209603"] # Sick_15d
  results["target_year"] = parsed["responses"][0]["answers"]["list_24905736_choice"] # target_year
  results["monthly_income"] = parsed["responses"][0]["answers"]["number_24904756"] # monthly_income
  results["independent"] = parsed["responses"][0]["answers"]["yesno_53895024"] # independent_1_year
  #results["subject_to_discuss"] = parsed["responses"][0]["answers"]["textarea_24904759"] # Avez-vous des sujets dont vous voulez discuter
end

2 个答案:

答案 0 :(得分:0)

Rails.cache.fetch存储从传递给此方法的块中计算的值(当然,如果有的话)。在您的示例中,您将从块中返回(0..9)范围,而不是实际评估的[email id]对。

答案 1 :(得分:0)

在获得正确的缓存之前,您必须尝试一些事项。从我的机器上附加屏幕截图。

此外,如果您处于开发环境中,则需要启用缓存以查看效果。您可以将config.action_controller.perform_caching = trueconfig.cache_store = :memory_store, { size: 64.megabytes }添加到development.rb配置文件中以启用缓存。

这只是了解缓存是如何发生的,并检查它是否真的有效,这应该可以帮助您完成任务。

enter image description here