2014-06-13 89 views
4

我試圖使用youtube數據API將本地視頻文件上傳到我的YouTube帳戶。使用YouTube將視頻上傳到YouTube數據API:損壞的管道(Errno :: EPIPE)

實施例:https://github.com/youtube/api-samples/blob/master/ruby/upload_video.rb

呼叫:

$ ruby upload_video.rb --file video.mp4 

我得到的錯誤消息:

/Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/openssl/buffering.rb:326:in `syswrite': Broken pipe (Errno::EPIPE) 
from /Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/openssl/buffering.rb:326:in `do_write' 
from /Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/openssl/buffering.rb:344:in `write' 
from /Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/http/generic_request.rb:202:in `copy_stream' 
from /Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/http/generic_request.rb:202:in `send_request_with_body_stream' 
from /Users/user/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/net/http/generic_request.rb:132:in `exec' 
... 
from upload_video.rb:73:in `main' 
from upload_video.rb:91:in `<main>' 

upload_video.rb(線73):

videos_insert_response = client.execute!(
    :api_method => youtube.videos.insert, 
    :body_object => body, 
    :media => Google::APIClient::UploadIO.new(opts[:file], 'video/*'), 
    :parameters => { 
    :uploadType => 'resumable', 
    :part => body.keys.join(',') 
    } 
) 
+0

任何運氣?我正面臨着類似的問題。上傳音頻文件時發生在我身上。 – Chirantan

+0

@Chirantan其實是的。查看解決方案。祝你好運 – BearGrylls

回答

10

谷歌的API-CL客戶使用法拉第寶石,默認的http適配器是Net :: HTTP。它似乎不能正常工作。所以我們需要把它切換到別的。我將其更改爲httpclient,現在它工作正常。 就在您的whatever.rb文件開頭的某處加入這一行(需要谷歌的庫後右):

Faraday.default_adapter = :httpclient 

支持HTTP適配器全部列表可以在這裏找到:https://github.com/lostisland/faraday#faraday

+0

謝謝你,我花了一段時間才能過去這個錯誤! –

+1

夥計。我愛你,非常感謝你!注意其他人,在api客戶端創建之前將其設置得很高。檢查客戶端應該看到'Faraday :: Adapter :: HTTPClient' – oma

+1

此外,google-api-client遠離法拉第,所以使用> = v0.9.0應該也可以解決這個問題。 – fotinakis

相關問題