使用Ruby对google drive api进行授权

使用Ruby对google drive api进行授权,ruby,google-api-client,google-drive-realtime-api,Ruby,Google Api Client,Google Drive Realtime Api,我想制作一个简单的应用程序(比如谷歌api控制台中的服务帐户),将文件发送到谷歌驱动器 我有这样的代码: require 'rubygems' require 'google/api_client' require 'launchy' #extra gem 'oauth2' gem 'omniauth' client = Google::APIClient.new({:application_name => "testdevelop",:application_version =>

我想制作一个简单的应用程序(比如谷歌api控制台中的服务帐户),将文件发送到谷歌驱动器

我有这样的代码:

require 'rubygems'
require 'google/api_client'
require 'launchy'

#extra
gem 'oauth2'
gem 'omniauth'

client = Google::APIClient.new({:application_name => "testdevelop",:application_version => "1.0"})
drive = client.discovered_api('drive', 'v2')

####################################################################################
# Initialize OAuth 2.0 client    
# client.authorization.client_id = '111062272758.apps.googleusercontent.com'
# client.authorization.client_secret = 's8j3VQwCvlyz2Hcpr06xrVfr'
# client.authorization.redirect_uri = 'urn:ietf:wg:oauth:2.0:oob'
# client.authorization.scope = 'https://www.googleapis.com/auth/drive'
# uri = client.authorization.authorization_uri
# Launchy.open(uri)
# $stdout.write  "Enter authorization code: "
# client.authorization.code = gets.chomp
# client.authorization.fetch_access_token!

####################################################################################
key = Google::APIClient::KeyUtils.load_from_pkcs12('12355eaee706eb725ff5dd890b5c2bc39d536a53-privatekey.p12', 'notasecret')
client.authorization = Signet::OAuth2::Client.new(
  :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
  :audience => 'https://accounts.google.com/o/oauth2/token',
  :scope => 'https://www.googleapis.com/auth/prediction',
  :issuer => '312062272758-bg7s7ts9f3m11hjetboodre6hfg4qp8q@developer.gserviceaccount.com',
  :signing_key => key)
client.authorization.fetch_access_token!
#####################################################################################


# Make an API call
# Insert a file
file = drive.files.insert.request_schema.new({
  'title' => 'My document',
  'description' => 'A test document',
  'mimeType' => 'text/plain'
})

media = Google::APIClient::UploadIO.new('document.txt', 'text/plain')
result = client.execute(
  :api_method => drive.files.insert,
  :body_object => file,
  :media => media,
  :parameters => {
    'uploadType' => 'multipart',
    'alt' => 'json'})

# Pretty print the API result
jj result.data.to_hash
当我运行它时,我得到了一个错误

`rbuf_fill中的救援:超时::错误(法拉第::错误::超时错误)

当我取消注释注释注释代码和注释代码时,可以将文件发送到gDrive,但我必须从web浏览器输入授权代码

我想自动完成这项工作,因为我决定像使用服务帐户一样使用gDrive

我已尝试通过添加线路来增加连接超时:

conn = Faraday.default_connection
conn.options[:timeout] = 500 
当然还有连接:conn在请求中的参数之后,但我有另一个错误

`sysread\u nonblock':已到达文件结尾 (法拉第::错误::连接失败)

缺少(ssl)-证书。
如何修复:

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会变得无效。答案是和是:“证书丢失”-其他所有内容都是额外的,以便“有”30个字符。