Fog-google 找不到凭据

Fog-google doesn't find credentials

我有一个 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

然后我尝试 运行 按照指南中的说明进行撬动,但它没有获得凭据。

[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 从 .fog 文件中获取凭据?

我不知道知道我正在使用 Figaro gem 来管理我的秘密是否有用。

快速解决方案

.fog 文件放在服务器(或您的计算机)的根目录中,而不是应用程序的根目录中。

这很糟糕,但这是我在快速寻找解决问题时发现的第一个问题。

正确的解决方案

如果您使用 google_json_key_location: google-storage-cdn.json Rails 将查看当前服务器的 / 文件夹(如果您在本地工作,则为您的计算机)。为了查看应用程序文件夹,您需要使用 Rails 助手。

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

我一直在寻找如何避免将此 .fog 文件放入我的主目录的解决方案,因为它完全没有意义。截至撰写此评论时,官方 github 文档尚未更新。但是,there is an open issue on fog-google github repo 演示了如何实现它。

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