4

这肯定让我困惑了几个小时。我已经按照 Baugues的详细说明引导了我的应用程序,以至于通过 OAuth2 进行身份验证有效,我只是在session#create(回调)操作中测试了一些东西。这是一些代码:

class SessionsController < ApplicationController
  def create
    @auth = request.env["omniauth.auth"]
    @token = @auth["credentials"]["token"]
    client = Google::APIClient.new
    client.authorization.access_token = @token
    service = client.discovered_api('drive', 'v1')

    file_content = Google::APIClient::UploadIO.new("foo", "text/plain")

    # @result = client.execute(
    #   :api_method => service.files.get,
    #   :parameters => { 'id' => 1 },
    #   :headers => {'Content-Type' => 'application/json'})
  end
end

在进行身份验证时,上述逻辑在callback方法中执行 - 出于此粗略测试的目的,该方法呈现create.html.erb. 我已经注释掉了@result刚刚回显到视图中的实例变量。

但是,当它显然不应该Google::APIClient::UploadIO.new("foo", "text/plain")触发时。uninitialized constant Google::APIClient::UploadIO我已经挖掘了这个宝石的来源,并且UploadIO课程requiredmedia.rb宝石中。

建议和帮助表示赞赏!

参考:

4

3 回答 3

8

检查您的 Gemfile.lock 以查看它实际使用的 google-api-client 版本。当我执行相同的步骤时,它看起来默认设置为 0.3.0,可能是由于 google-omniauth-plugin 的依赖有点落后。0.3.0 没有媒体支持。

尝试将您的 Gemfile 更改为

gem 'google-api-client', '~> 0.4.3', :require => 'google/api_client'

并重新运行“捆绑安装”以强制它使用更新的版本。

于 2012-05-30T01:29:01.710 回答
3

在这里您可以看到如何从版本 0.8.* 迁移到 0.9.*

在 0.8.x 中,该库会动态“发现” API,从而引入额外的网络调用和不稳定性。这已在 0.9 中修复。

要在 0.8.x 中获取驱动器客户端,需要这样做:

require 'google/api_client'

client = Google::APIClient.new
drive = client.discovered_api('drive', 'v2')

在 0.9 中,同样的事情可以这样完成:

require 'google/apis/drive_v2'

drive = Google::Apis::DriveV2::DriveService.new

所有 API 均可立即访问,无需额外的网络调用或运行时代码生成。

API 方法

API 方法的调用方式已更改。在 0.8.x 中,所有调用都是通过通用的执行方法。在 0.9 中,生成的服务对所有可用方法都有完全定义的方法签名。

要在 0.8.x 中使用 Google Drive API 获取文件,需要这样做:

file = client.execute(:api_method => drive.file.get, :parameters => { 'id' => 'abc123' })

在 0.9 中,同样的事情可以这样完成:

file = drive.get_file('abc123')

可以在生成的目录中找到完整的 API 定义,包括可用的方法、参数和数据类。

关联

于 2017-02-18T16:18:52.313 回答
3

对于偶然发现google-api-clientgem 版本大于或等于 0.9 的人,您将需要使用以下内容:

gem 'google-api-client', :require => 'google/apis/analytics_v3'

将“analytics_v3”与您正在使用的生成的 google 服务 api 交换。

有关生成的 API 名称的完整列表,请参阅:https ://github.com/google/google-api-ruby-client/tree/master/generated/google/apis

于 2016-03-10T22:10:29.453 回答