Как аутентифицировать Google Vision / Cloud с помощью переменной ENV в Ruby on Rails - PullRequest
0 голосов
/ 03 мая 2018

Мое приложение размещено на Heroku, поэтому я пытаюсь выяснить, как использовать JSON Google Cloud (для проверки подлинности) в качестве переменной среды, но до сих пор не могу пройти проверку подлинности.

Я искал в Google и Stack Overflow, и я нашел лучшие лиды:

Аутентификация Google Vision API на героку

Как загрузить файл json с секретными ключами в Heroku

Оба говорят, что смогли заставить его работать, но они не предоставляют код, который я смог получить на работе. Может кто-нибудь, пожалуйста, помогите мне? Я знаю, что это, наверное, что-то глупое.

В настоящее время я просто пытаюсь протестировать службу в моей модели продукта, используя этот пример кода от Google. Моя выглядит так:

def self.google_vision_labels
  # Imports the Google Cloud client library
  require "google/cloud/vision"

  # Your Google Cloud Platform project ID
  project_id = "foo"

  # Instantiates a client
  vision = Google::Cloud::Vision.new project: project_id

  # The name of the image file to annotate
  file_name = "http://images5.fanpop.com/image/photos/27800000/FOOTBALL-god-sport-27863176-2272-1704.jpg"

  # Performs label detection on the image file
  labels = vision.image(file_name).labels

  puts "Labels:"
  labels.each do |label|
    puts label.description
  end
 end

Я получаю эту ошибку,

RuntimeError: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information

На основании прочитанного я попытался поместить содержимое JSON в secrets.yml (я использую драгоценный камень Figaro), а затем сослаться на него в файле Google.yml, основываясь на ответе на этот вопрос SO.

В application.yml я вставил (я перезаписал часть содержимого в этом посте в целях безопасности):

GOOGLE_APPLICATION_CREDENTIALS: {
  "type": "service_account",
  "project_id": "my_project",
  "private_key_id": "2662293c6fca2f0ba784dca1b900acf51c59ee73",
  "private_key": "-----BEGIN PRIVATE KEY-----\n #keycontents \n-----END PRIVATE KEY-----\n",
  "client_email": "foo-labels@foo.iam.gserviceaccount.com",
  "client_id": "100",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": 
  "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": 
  "https://www.googleapis.com/robot/v1/metadata/x509/get-product-labels%40foo.iam.gserviceaccount.com"
}

и в config/google.yml я положил:

GOOGLE_APPLICATION_CREDENTIALS = ENV["GOOGLE_APPLICATION_CREDENTIALS"]

также, пробовал:

GOOGLE_APPLICATION_CREDENTIALS: ENV["GOOGLE_APPLICATION_CREDENTIALS"]

Я также пытался изменить эти имена переменных в обоих файлах вместо GOOGLE_APPLICATION_CREDENTIALS с GOOGLE_CLOUD_KEYFILE_JSON и VISION_KEYFILE_JSON на основе этой страницы Google.

Может кто-нибудь, пожалуйста, помогите мне понять, что я делаю неправильно, ссылаясь на / создавая переменную среды с учетными данными JSON? Спасибо!

...