16

Paperclip と S3 を使用して、Heroku で実行される Rails アプリを作成しました。サイトを介して画像を S3 バケットにアップロードすることができました (Amazon コントロール パネルのバケットに画像が表示されるのを確認できます)。

しかし、画像タグ、つまり <%= image_tag x.photo.url %> を追加すると、次の html (ここではタグは省略されています) が表示され、画像は表示されません!

img alt="Test_tree" src="http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"

助けてください!画像がバケツにあるのに、画像が表示されないのはなぜですか?

どうもありがとう

4

2 に答える 2

18

ペーパークリップ初期化子と呼ばれるファイルを作成します。

# config/initializers/paperclip.rb 
# We are actually setting this to 's3_domain_url', 
# so it's not a placeholder for something else. 
Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'

または、これを内部に配置することもできますproduction.rb

config.paperclip_defaults = {
    :storage => :s3,
    :s3_credentials => {
        :bucket => ENV['S3_BUCKET_NAME'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
    },
    :url =>':s3_domain_url',
    :path => '/:class/:attachment/:id_partition/:style/:filename',
}
于 2013-09-30T18:53:29.757 に答える
12

まず、コードで使用しようとしている URL は次のとおりです。

http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg

ブラウザでそのリンクにアクセスすると、次のように表示されます。

<message>
  The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
</Message>
<RequestId>810A6AE1D141304C</RequestId>
<Bucket>hiphotos</Bucket>
<HostId>
  XXZ+s+slgZLsRWy5NiU/G0yAKBLftw0oT2dDKpas532qXJEPSrISVPqfZsEgpb2J
</HostId>
<Endpoint>hiphotos.s3.amazonaws.com</Endpoint>

したがって、正しいエンドポイントを使用して URL を変更すると、次のようになります。

http://hiphotos.s3.amazonaws.com/ads/photos/000/000/015/original/test_tree.jpg

どちらが正しい画像を返しますか。

ヨーロッパのバケットを使用している場合、これが発生する可能性があり、s3 へのプッシュに使用している gem に問題がある可能性があります。

Paperclip、S3、European バケットをうまく組み合わせる方法に関する記事がたくさんあります。

ただし、aws-s3 gem の代わりに Fog を使用するasset_sync gem を使い始めてから、ペーパークリップと S3 で問題が発生しなくなりました。

したがって、霧がこの問題を解決するのに何か関係があるのではないかと思います。他のものを使用している場合は、それに切り替えることをお勧めします。

于 2012-08-11T06:38:25.313 に答える