Fog-Google не находит учетные данные

У меня есть приложение Rails 5 с Carrierwave. Я хотел бы использовать fog-google gem, но не могу его настроить, потому что fog не может получить учетные данные.

Я создал .fog Файл в корне моего приложения заполняется следующим образом:

default:
    google_project: XXXX-website-cdn
    google_client_email: XXXX@XXXX-website-cdn.iam.gserviceaccount.com
    google_json_key_location: google-storage-cdn.json

Затем я попытался запустить pry, как указано в руководстве, но он не получил учетные данные.

[3] pry(main)> connection = Fog::Compute::Google.new
ArgumentError: Missing required arguments: google_project
from /Users/ab/.rvm/gems/ruby-2.3.1/gems/fog-core-1.43.0/lib/fog/core/service.rb:244:in `validate_options' 

По факту:

[4] pry(main)> Fog.credentials
=> {}

Где я могу сказать туман, чтобы получить полномочия от .fog файл?

Я не знаю, было бы полезно знать, что я использую драгоценный камень Figaro для управления своими секретами.

1 ответ

Решение

БЫСТРОЕ РЕШЕНИЕ

Положить .fog файл в корне сервера (или вашего компьютера), а не в приложении.

Это довольно плохо, но это первое, что я нашел, когда быстро искал решение проблемы.

ПРАВИЛЬНОЕ РЕШЕНИЕ

Если вы используете google_json_key_location: google-storage-cdn.json Рельсы будут смотреть в / папка текущего сервера (ваш компьютер, если вы работаете локально). Чтобы заглянуть в папку приложения, вам нужно использовать помощник по Rails.

Rails.root.join( 'google-storage-cdn.json' )
# return /path/to/your/app/google-storage-cdn.json

Некоторое время я искал решение о том, как не помещать этот файл.fog в мой домашний каталог, поскольку в этом нет никакого смысла. До момента написания этого комментария официальная документация github не обновлялась. Тем не менее, существует нерешенная проблема в github-репозитории fog-google, которая демонстрирует, как ее достичь.

config/initializers/carrierwave.rb

CarrierWave.configure do |config|
    config.fog_provider = 'fog/google'
    config.fog_credentials = {
        provider: 'Google',
        google_project: Rails.application.secrets.google_cloud_storage_project_name,
        google_json_key_string: Rails.application.secrets.google_cloud_storage_credential_content
        # can optionally use google_json_key_location if using an actual file;
        # however, I am using **Heroku** where you can't store physical files unless you
        # check them into the repo (and you don't want to do that with service account credentials!)
    }
    config.fog_directory = Rails.application.secrets.google_cloud_storage_bucket_name
end


config/secrets.yml

development:
    google_cloud_storage_project_name: your-project-name
    google_cloud_storage_credential_content: '{
        "type": "service_account",
        "project_id": "your-project-name",
        "private_key_id": "REDACTED",
        "private_key": "-----BEGIN PRIVATE KEY-----REDACTED-----END PRIVATE KEY-----\n",
        "client_email": "REDACTED@your-project-name.iam.gserviceaccount.com",
        "client_id": "REDACTED",
        "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/REDACTED%40your-project-name.iam.gserviceaccount.com"
    }'
    google_cloud_storage_bucket_name: your-bucket-name

Все кредиты идут на афишу решения cireficc

Другие вопросы по тегам