2017-10-27 10 views
-1

キャッシングに関する問題があります。私はそれをどのように設定すべきか分かりません。 レールのキャッシングに問題があります。

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から情報を取得するために私のキャッシュを使用したい

UPDATE

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 
+0

最初に、apiエンドポイントからの応答が成功したかどうかを確認します。 第2に、キー 'cache_typeform'がすでにキャッシュストア内に存在し、nilを指していることがあります。つまり、キャッシュキーにはキャッシュストアに値が格納されていません。 rails consoleから 'Rails.cache.clear'を実行してキャッシュをクリアし、そうでないかどうか確認することができます。 最後に、apiエンドポイントからの応答が良好で、キャッシュブロックを削除して目的の出力を取得できるかどうかを再度確認します。 –

+0

ところで、あなたの質問に明示的な詳細を加えないでください。他の人が悪用する可能性があります。テスト目的で公開されていない限り、あなたの質問に認証の詳細を追加する必要はありません。 –

+0

こんにちは@PamioSolanky、あなたの答えに感謝します。キャッシュをクリアしようとしましたが、何も起こりませんでした。 btwをキャッシュせずに動作します。 承認をいただきありがとうございます。それを完全に削除することを忘れてしまった。 –

答えて

0

ここでは、キャッシュを正しく取得する前に試す必要があることがあります。私のマシンからスクリーンショットを添付する。

また、開発環境にある場合は、キャッシュを有効にしてその効果を確認する必要があります。 development.rb設定ファイルにconfig.action_controller.perform_caching = trueconfig.cache_store = :memory_store, { size: 64.megabytes }を追加して、キャッシュを有効にすることができます。

これはキャッシュがどのように行われ、実際に動作するかを確認するためのアイデアです。

enter image description here

+0

もう少し明確です!どうもありがとうございました! –

0

Rails.cache.fetch店このメソッドに渡されたブロックから評価値(1が存在する場合、もちろん)。あなたの例では、ブロック(0..9)の範囲を、実際には[email id]のペアではなく返しています。

+0

あなたの答えをありがとう。コードを更新するつもりです。私の問題をよりよく理解できると思うからです。私はあなたの解決策を試したので、それはうまくいきません。 –

関連する問題