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