2015-01-06 1 views
7

Rails 4 앱에서 paperclip 및 aws-sdk 보석을 사용하고 있습니다. 더와 함께, 내 paperclip.rb의 설정에서 경로 옵션 :내 S3 URL을 올바르게 설정하기 위해 Paper Clip을 얻을 수 없습니다.

은 내가 정의하지 URL 옵션 : 그것은 같은처럼 내 업로드 된 이미지를 저장

Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename" 

:

http://s3.amazonaws.com/mybucket-development/profiles/avatars/000/000/026/original/image_file_name.png?1420575189

모든 벌금을, S3에 저장됩니다. 그러나 그것은 디스플레이를 위해 이미지를 읽도록 허용하지 않습니다. = profile.avatar.url (: medium). 브라우저의 해당 URL로 이동하면 버킷 이름을 도메인으로 다시 포맷하라는 메시지가 표시됩니다. 마찬가지로 :

http://mybucket-development.s3.amazonaws.com/profiles/avatars/000/000/026/original/image_file_name.png?1420575189

확인 중 문제가되지 않습니다. 나는 그 URL로 이동, 내 이미지를 볼 수 있습니다. 이제 Paperclip이 자동으로 URL을 형식화하는 방법을 알아야합니다. 경로 매개 변수 또는 난 그냥 종이 클립 :: 오류를 얻을 것이다 : InfiniteInterpolationError을 : 나는 당신이 단지

Paperclip::Attachment.default_options[:url] = ":s3_domain_url" 

을 설정해야하는 종이 클립 문서에 내가도를 설정해야한다는 읽어 보시기 바랍니다.

그래서 나는 내 설정 파일을 설정 모두 결합 :
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename" 
Paperclip::Attachment.default_options[:url] = ":s3_domain_url" 

가 작동하지

... 난 상관없이 나는 그것을 할 것을 * paperclip.rb을 폐기하고 설정/환경 /에 넣어 시도하지하지만 경로에 버킷 이름이 포함 된 도메인이없는 URL도 저장합니다.

그래서 두 가지 질문 :

1) 어떻게 종이 클립이 자동으로 도메인 스타일에 저장된 URL을 포맷 할 수 있습니까?

2) 또는 더 나은 방법으로, S3가 현재 도메인 생성이 아닌 도메인 스타일 URL을 받아 들일 수 있습니까? 나는 s3_host_name 옵션에 추가 할 경우

편집

그래서, 다음은 URL의 도메인 스타일을 절약 할 수 있습니다. "(

http://mybucket-development.s3-us-west-2.amazonaws.com/profiles/avatars/000/000/026/original/image_file_name.png%3F1420580224

을하지만 지금은 내가 %의 3 층의 인코딩을 가지는 것을 볼 : 그래서 모두 3 있어야 :

Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename" 
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com' 

을 그리고 그것은과 같이 모델에 내 URL을 저장합니다 ? ") URL을 엉망으로 만든다.

+1

S3에서 버킷 정책을 만들었습니까? –

답변

12

좋아, 위의 업데이트에 언급 한 바와 같이, 도메인 스타일의 URL이 종이 클립에 의해 구원을 얻을 수 있도록 나는 내 paperclip.rb에서 다음 중 3 포함해야 :

Paperclip::Attachment.default_options[:url] = ':s3_domain_url' 
Paperclip::Attachment.default_options[:path] = ":class/:attachment/:id_partition/:style/:filename" 
Paperclip::Attachment.default_options[:s3_host_name] = 's3-us-west-2.amazonaws.com' 

내가 생각을 최근의 보석 업그레이드로 인해 관련 문제가 발생하면 자체적으로 작동하지 않는 인코딩이 포함 된 URL이 생성됩니다.

내 견해로는 URI를 추가해야했습니다.언 이스케이프, 같은

같은

= IMAGE_TAG URI.unescape ((profile.avatar.url : 중)) "?"

가 나는 또한 함께 % 3 층을 대체 할 모델에 콜백을 설정할 수 저장하기 전에.

Paperclip의 이상한 문제 ... 무슨 일인지 확실하지 않습니다. 첫 번째 앱 나는 그 문제가 발생한 곳에서 일했습니다. production.rb에서 paperclip.rb

Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-south-1.amazonaws.com' 

에서

+0

이것은 실제로 나를 위해 일했습니다. 고맙습니다! – jfarn23

+2

다른 설정을 덮어 쓰는 s3_host_name을 설정했기 때문에 작동합니다. url과 : path를 실제로 제거 할 수 있으며 여전히 작동합니다. 오늘 클립에 대한 소스 코드를 살펴 보았지만 ': s3_domain_url'논리를 올바르게 구현하지 못했습니다. 또는 적어도 저에게는 의미가 없습니다. – Troy

0

config.paperclip_defaults = { 
      storage: :s3, 
      s3_protocol: :https, 
      s3_credentials: { 
      bucket: ENV.fetch('S3_BUCKET_NAME'), 
      access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), 
      secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), 
      s3_region: ENV.fetch('AWS_REGION') 
} 

이 거의 IMAGE_TAG 나를 위해 잘 작동했다. 그것은 당신을 위해 또한 작동해야합니다.