2016-08-05 4 views
1

私はルビーにとってとても新しいです。私は、ルビーを使用してAWS S3に接続することができます。次のコードを使用していますAWSのためにrubyでget_objectを使用するには?

filePath = '/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csv' 

    s3.get_object({bucket: "analyticspoc", key:"TMEventLogs/stable/DeviceWiFi/20160803/1.0/"}, target:filePath) do |chunk| 
      puts "1" 
    end 

上記のコードでは、s3はクライアントです。 "analyticspoc"はルートバケットです。 CSVファイルへのパスは、All Buckets /analyticspoc/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csvです。

私は上記のコードを試しました。コードの上に私はエラーError getting objects: [Aws::S3::Errors::NoSuchKey] - The specified key does not existを得ていた。上記のコードを使用して、ファイルの内容を読みたいと思います。どうやってするか ?上記のコードで間違いが何であるか教えてください

+0

を次のように単一のファイルの内容にアクセスするために使用される(一度に1000)のチャンクにファイル名の配列にアクセスするためのLIST_OBJECTSを使用することができます':key'オプション?そのファイルをダウンロードしてディスクに書き込もうとしている場合、正しいオプションは 'response_target'と書かれています。 –

答えて

0

答えを得ました。あなたには、あなたが実際のファイル名を欠落していないGET_OBJECTが

BUCKET = "analyticspoc" 
path = "TMEventLogs/stable/DeviceWiFi/20160803/1.0/" 
s3.list_objects(bucket:BUCKET, prefix: path).each do |response| 
    contents = response.contents 
end 


file_name = "TMEventLogs/stable/DeviceWiFi/20160803/1.0/012121212121" 
response = s3.get_object(bucket: BUCKET, key: file_name) 
0

私はあなたが引数を間違って渡していると言うことができます。私はそれは明らかに仕事に行くされていない文字列キーとしてあなたのハッシュを使用しようとしていたと信じて

s3.get_object(
    bucket: "analyticspoc", 
    key: "TMEventLogs/stable/DeviceWiFi/20160803/1.0/", 
    target: filePath 
) do |chunk| 
    puts "1" 
end 

:それはdocumentation for get_objectによる単一optionsハッシュする必要があります。

Rubyの中括弧{ }は、追加の引数が別のハッシュになる必要があるか、非ハッシュであればメソッド呼び出しでのみ必要です。これは、オプションが意図的に最後で、唯一の引数であるために最初と最後になることが多いほとんどの場合、構文がかなり醜いものになります。

+0

私はあなたから与えられたコードを試しましたが、それと同じエラーです。私もtarget_targetをresponse_targetに置き換えようとしました –

+0

あなたが使っているRubyライブラリが分かりません。これはちょうどデフォルトのものです。エラーが発生している場合は、電話が間違っています。ドキュメントを確認してください。 – tadman

関連する問題