Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 谷歌/API/drive\u v2新的谷歌硬盘认证。我还希望避免对GoogleAPI客户端感到失望_Ruby_Ruby On Rails 4_Google Drive Api_Google Api Client - Fatal编程技术网

Ruby 谷歌/API/drive\u v2新的谷歌硬盘认证。我还希望避免对GoogleAPI客户端感到失望

Ruby 谷歌/API/drive\u v2新的谷歌硬盘认证。我还希望避免对GoogleAPI客户端感到失望,ruby,ruby-on-rails-4,google-drive-api,google-api-client,Ruby,Ruby On Rails 4,Google Drive Api,Google Api Client,首先,我的问题是如何使用我的rails 4.2应用程序使google drive_v2认证工作并创建新文件等。我的rails应用程序带有Desive/omniauth2和google,运行良好。我已经在google开发控制台中激活了web auth和google API auth。两个客户端机密都已下载并正常工作 这么说吧。我需要离线访问的rails应用程序能够使用、创建和删除goole文档和电子表格。我已经设置了.drive的作用域,设置了脱机访问等 我甚至还编写了一些代码,如果我在谷歌游乐场

首先,我的问题是如何使用我的rails 4.2应用程序使google drive_v2认证工作并创建新文件等。我的rails应用程序带有Desive/omniauth2和google,运行良好。我已经在google开发控制台中激活了web auth和google API auth。两个客户端机密都已下载并正常工作

这么说吧。我需要离线访问的rails应用程序能够使用、创建和删除goole文档和电子表格。我已经设置了.drive的作用域,设置了脱机访问等

我甚至还编写了一些代码,如果我在谷歌游乐场上使用一个新的访问令牌,这些代码就可以正常工作

我的第一个问题是使用google api客户端(版本0.9pre3)获取刷新令牌和身份验证或获取新令牌的能力,这样人们就不会感到困惑了

为了使用新的GoogleAPI,我需要注释掉GoogleDrive,因为似乎所有的api都合并到了客户端中

gem 'omniauth-google-oauth2'
#gem 'google_drive'
gem 'google-api-client', '0.9.pre3'
我被身份验证/授权步骤卡住了,对此我感到相当愚蠢

因此,github repo上的api示例代码或google开发网站让我相信这是可行的

require 'google/apis/drive_v2'

Drive = Google::Apis::DriveV2 # Alias the module
drive = Drive::DriveService.new
drive.authorization = authorization # See Googleauth or Signet libraries

当然,什么是授权?根据我去的文件

运行下面的示例代码: 需要“googleauth”

获取已配置的环境授权 导致:

authorization = Google::Auth.get_application_default(scopes)
RuntimeError: Could not load the default credentials. Browse to
https://developers.google.com/accounts/docs/application-default-credentials
for more information
from /Users/prussiap/.gem/ruby/2.2.0/gems/googleauth-0.4.2/lib/googleauth.rb:116:in `get_application_default'
可能是因为我的困惑或愚蠢

谷歌开发网站上显示的另一个方法是上面链接的文档和服务帐户,这似乎是一个好办法

但什么都不管用。我也看到了一些客户的秘密

client_secrets = Google::APIClient::ClientSecrets.load
authorization = client_secrets.to_authorization
当然,加载会自行中断,因为它需要一个神奇的文件路径或文件名,但我给它的任何东西都不起作用

任何允许我使用我的client_secret for service account或oauth2(web应用程序)但不使用任何花哨重定向的示例代码都是非常棒的,而且非常有用

现在,对于谷歌api的其他新手,请阅读下面的内容。我觉得我很傻,因为我没有看到或注意到这一点,但也许这一信息可以帮助你们,当我在github回购协议上提出时,我感到困惑

显然,用于ruby的GoogleAPI客户端与<0.9pre1或更高版本完全不同。文件也是如此

因此,如果您正在阅读这种类型的代码,并且正在阅读这些代码:

然后使用<0.9pre1(我很确定)

否则,您会看到我上面的代码和drive_v2,然后删除您的google_drive gem,因为它被集成到一个api中并读取文档

我希望这能帮助别人


关于我的身份验证问题的任何帮助,包括使用服务、api和其他类型的帐户以及一些示例代码进行身份验证,然后使用刷新令牌进行身份验证。太棒了。

我在Windows操作系统上运行时遇到了这个问题。结果发现ruby auth库中有一个用于检测操作系统的bug


如果您直接或间接通过google api客户端下载最新版本的googleauth gem,您将得到修复。

我刚刚遇到了同样的问题--我还没有完全解决它,但我通过设置google\u APPLICATION\u CREDENTIALS环境变量克服了这个特殊错误,并将其指向服务帐户密钥文件——这与早期版本的API使用的客户端密钥不同

谷歌在其文档中的说明:列出了这一点,但重要的是“服务帐户”是一种不同于客户端的身份验证方法

首先,转到项目页面,选择一个现有的/创建一个新的“服务帐户密钥”。假设我们已经将下载的.json文件放在/path/to/svc\u acct\u auth.json中

在ruby代码中,添加以下行:

ENV[“谷歌应用程序凭据”]='/path/to/svc\u acct\u auth.json'


这将使服务正确返回,并使您通过运行时错误。当然,我仍然无法通过这个身份验证系统执行我需要的调用,但是嘿!我已逐渐了解更新和更好的错误消息。

以下是我用来将db备份保存到google drive的代码,可能会有所帮助:

require 'google/apis/drive_v2'
ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "#{Rails.root}/config/google_api_credentials.json"
drive = Google::Apis::DriveV2::DriveService.new
drive.authorization = Google::Auth.get_application_default([Google::Apis::DriveV2::AUTH_DRIVE_FILE])

metadata = {title: File.basename(archive_path, '.sql.bz2')}
file = drive.insert_file(metadata, upload_source: archive_path, content_type: 'application/x-bzip2')

perm_id = drive.get_permission_id_for_email('some-email@gmail.com')
perm = Google::Apis::DriveV2::Permission.new(role: 'writer', id: perm_id.id, type: 'user')
drive.insert_permission(file.id, perm)

嘿,我没有这个麻烦。我只是在使用omniauth-google-oauth2时遇到了麻烦,我想知道我应该如何替换clients secret.json部分(因为客户端id和secret保存在omniauth.rb文件中)以及如何从那里开始。缺少文档是…典型的,我想,但如果我让这些东西工作起来,我计划发布说明,也会出现这个错误。似乎问题可以简化为身份验证部分,因为驱动器api的上下文与导致错误的代码无关。我希望自己能够访问分析api…这非常有效。有很多过时和矛盾的信息版本,其中很多都在谷歌自己的网站上。我认为期望他们移除那些不再有效的东西是合理的。我现在可以识别和忽略旧的东西,并最终取得进展。至少,他们的页面应该有明确的发布日期,但他们没有。
client_secrets = Google::APIClient::ClientSecrets.load
authorization = client_secrets.to_authorization
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
require 'google/api_client/auth/storage'
require 'google/api_client/auth/storages/file_store'
require 'fileutils'

APPLICATION_NAME = 'Drive API Quickstart'
CLIENT_SECRETS_PATH = 'client_secret.json'
CREDENTIALS_PATH = File.join(Dir.home, '.credentials',
                             "drive-quickstart.json")
SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly
require 'google/apis/drive_v2'
ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "#{Rails.root}/config/google_api_credentials.json"
drive = Google::Apis::DriveV2::DriveService.new
drive.authorization = Google::Auth.get_application_default([Google::Apis::DriveV2::AUTH_DRIVE_FILE])

metadata = {title: File.basename(archive_path, '.sql.bz2')}
file = drive.insert_file(metadata, upload_source: archive_path, content_type: 'application/x-bzip2')

perm_id = drive.get_permission_id_for_email('some-email@gmail.com')
perm = Google::Apis::DriveV2::Permission.new(role: 'writer', id: perm_id.id, type: 'user')
drive.insert_permission(file.id, perm)