1

我有一个带有 Carrierwave 的 Rails 5 应用程序。我想使用雾谷歌gem,但我无法设置它,因为雾无法检索凭据。

我在以.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 gem 来管理我的秘密是否有用。

4

2 回答 2

1

快速解决方案

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

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

正确的解决方案

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

Rails.root.join( 'google-storage-cdn.json' )
# return /path/to/your/app/google-storage-cdn.json
于 2017-02-22T23:18:30.767 回答
0

我一直在寻找有关如何避免将此 .fog 文件放入我的主目录的解决方案,因为这完全没有意义。在撰写此评论之前,官方 github 文档尚未更新。但是,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的海报

于 2019-02-04T18:14:23.100 回答