Rails Низкоуровневое кеширование Google Translate API Google не работает - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь сделать простой низкоуровневый кэш API Google Translate в моем приложении rails, но кэширование работает неправильно:

1) Если cache_key = ['google_translate', 'first'], переведенное содержание равно '第一' и является правильным.

2) Если cache_key = ['google_translate', 'second'], переведенное содержание равно '第二', что является правильным.

3) Если снова cache_key = ['google_translate', 'first'], переведенное содержание (пусто), когда я должен ожидать '第一'

Я могу подтвердить, что API был вызван во время первых двух запросов, и не был вызван (как ожидалось) в третьем запросе, хотя и был неправильным.


Вот мой код:

class Model < ApplicationRecord

  def self.query_model(model_uid, text)
    cache_key = [model_uid, text]
    translate = Google::Cloud::Translate.new
    Rails.cache.fetch(cache_key) do
      translatedcontent = translate.translate text, from: 'en', to: "zh-cn"        
    end
    return translatedcontent
  end

end

1 Ответ

0 голосов
/ 15 января 2019

Решено, это кажется настолько очевидным, но кажется, что в большинстве уроков / примеров по кешированию в rails не показано, как кеширование используется таким образом.

class Model < ApplicationRecord

  def self.query_model(model_uid, text)
    cache_key = [model_uid, text]
    translate = Google::Cloud::Translate.new
    translatedcontent = Rails.cache.fetch(cache_key) do
      translatedcontent = translate.translate text, from: 'en', to: "zh-cn"        
    end
    return translatedcontent
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...