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 のバージョンを確認してください。同じ手順を実行したところ、おそらく google-omniauth-plugin が依存関係で少し遅れているため、デフォルトで 0.3.0 に落ち着いたようです。0.3.0 にはメディア サポートがありません。

Gemfile を次のように変更しようとしています

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

「bundle install」を再実行して、より新しいバージョンを強制的に使用させます。

于 2012-05-30T01:29:01.710 に答える
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 に答える