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