2017-01-06 8 views
2

私のアプリはAWS S3上にファイルを保存しています。ファイルが取得されると、その一部にメタデータフィールドがありません。私は、S3から取得された後でメタデータフィールドが存在し、有効であるかどうかを確認するためにファイルをチェックできるサービスを作成したいと思います。私はそれがmy_object.show_metadataのようにシンプルでなければならないと思っていますが、私は解決策を見落としています。そこAWS::S3::Object#metadata方法があるが、私はそれを使用しようとすると、私は次のエラーを取得する:RailsのAWS S3オブジェクトからプログラムでメタデータを読み取るにはどうすればよいですか?

*** NoMethodError Exception: undefined method `set?' for # < Hash::0x007ffa547a9350>

私はこの1つ上の私の死角が評価されて見つけやすくするために、任意の洞察力や質問を。

更新:問題は解決されました。この質問に答える正しい方法は、実際にはAWS::S3::Object#metadataメソッドです。この場合の問題は、S3オブジェクトの作成時にアクセス許可を明示的に設定する必要があることです。修正後

Aws::S3::Object.new(
    region: 'us-east-1', 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    bucket_name: "foo", 
    key: key 
) 

:修正前

Aws.config.update({ 
    credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']) 
}) 

Aws::S3::Object.new(
    region: 'us-east-1', 
    bucket_name: "foo", 
    key: key 
) 

私のコードを調整した後、私は#metadata含めて、成功したAWS S3のすべてのメソッドを使用することができました。

+1

あなたの編集を回答として追加して受け入れることをお勧めします。そうすれば、人々はこの質問に検索結果に答えがあることが分かります。 –

+1

@TomManterfieldありがとう、まだロープを学ぶ! – sammms

答えて

1

実際にこの質問に答える正しい方法は、AWS :: S3 :: Object#メタデータメソッドです。この場合の問題は、S3オブジェクトの作成時にアクセス許可を明示的に設定する必要があることです。修正後

Aws::S3::Object.new( 
    region: 'us-east-1', 
    access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], 
    bucket_name: "foo", 
    key: key 
) 

:修正前

Aws.config.update({ 
    credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], 
    ENV['AWS_SECRET_ACCESS_KEY']) 
}) 

Aws::S3::Object.new( 
    region: 'us-east-1', 
    bucket_name: "foo", 
    key: key 
) 

私のコードを調整した後、私は#metadata含めて、成功したAWS S3のすべてのメソッドを使用することができました。

関連する問題