2012-08-11 10 views
15

Papercut과 S3가있는 Heroku에서 실행되는 Rails 앱이 만들어졌습니다. 사이트를 통해 내 S3 버킷에 이미지를 업로드 할 수있었습니다 (Amazon 컨트롤 패널의 버켓에 표시됨).Paperclip S3 - 이미지를 업로드 할 수는 있지만 볼 수는 없습니다.

이미지 태그, 즉 < % = image_tag x.photo.url %>을 추가하면 이미지가 표시되지 않고 다음과 같은 html 태그가 표시됩니다.

의 img 고도 = "Test_tree"SRC = "http://s3.amazonaws.com/hiphotos/ads/photos/000/000/015/original/test_tree.jpg?1344661020"

도와주세요! 이미지가 양동이에 있더라도 왜 이미지를 볼 수 없습니까?

덕분에 너무 많은 사람들

첫째
+0

확인 [내 대답 (http://stackoverflow.com/a/를 25080586/316700) – fguillen

답변

11

, 당신은 당신의 코드에서 거기 사용하려고하는 URL은 이것이다 :

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

브라우저에서 해당 링크를 방문 할 때, 당신은 다음을 참조 :

: 우리가 올바른 엔드 포인트를 사용하여 URL을 수정하면

<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> 

그래서 우리는이 수

올바른 이미지를 반환합니다.

유럽 양동이를 사용하는 경우 이런 일이 발생할 수 있으며, 물건을 s3에 밀어 넣는 데 사용하는 보석의 결함 일 수 있습니다.

Paperclip, S3 및 유럽 버킷을 함께 멋지게 연출하는 방법에 대한 기사가 많이 있습니다.

aws-s3 보석 대신 안개를 사용하는 asset_sync 보석을 사용하기 시작한 이래로 클립 클립 및 S3에 더 이상 문제가 없습니다.

그래서 안개가이 문제를 해결하기위한 것으로 생각됩니다. 만약 당신이 다른 것을 사용한다면, 나는 그것으로 전환하는 것이 좋습니다.

+2

당신, 내 친구, 아름다운 사람입니다 :) 이틀 동안이 작업을했습니다 - 귀하의 제안에 의해 해결되었습니다. 이 모델을 내 모델에 추가해야했습니다. : url => ": s3_domain_url", : 경로 => (오류가 아니라면 URL에 포함되어야 함) 감사합니다. – Misrab

+0

하, 문제 없어요! – stephenmurdoch

+0

문제의 재현. –

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', 
} 
+4

나는 url 키의 값으로 s3 도메인을 넣어야한다는 의미로 사용했습니다. 나중에 디버깅을 한 시간 동안, 나는 그 클립이 너트이고, 특히 그 키에 대해 ": s3_domain_url"값을 찾습니다. 알아라! –

+1

감사합니다. @awesome_person, 방금이 사실을 알리기 위해 의견을 말했습니다. – Zorayr

+0

URL 줄의 주석으로 @awesome_person의 정보를 추가 할 수 있습니까? – retroGiant

관련 문제