이미지를 저장하는 Ruby on Rails 방법은 무엇입니까?


9

iOS 에서 개발하고 있으며 PHP 백엔드에서 Ruby on Rails로 전환하고 있습니다. 교환 형식은 JSON 입니다.

'Rails에 이미지 저장'을 빠르게 Google에서 검색하면 거의 모든 결과가 데이터베이스에 Blob으로 이미지 데이터를 저장하는 것과 관련이 있습니다. 내가 잘못했을 수도 있지만 데이터베이스에 이미지 데이터를 저장하면 파일 위치에 대한 링크를 저장하는 것과는 달리 ( '/img/subcat/4656.png') 시간과 공간이 많이 낭비된다는 인상을 받고 있습니다. .

PHP에서는 데이터를 받고, 파일 이름을 생성하고, 파일을 디스크에 저장하고, 디스크의 이미지 위치로 데이터베이스를 업데이트하는 것이 표준입니다. Ruby on Rails와 동일합니까, 아니면 모르는 내장 된 ActiveRecord 이미지 기능이 있습니까?


1
PaperClip을 우연히 발견 했습니다 . 이것은 내가 원하는 것에 매우 가깝습니다. 숙련 된 Rails 직원들로부터 수천 개의 이미지를 최적의 속도로 처리하고 수신하는 방법에 대한 조언을 부탁드립니다.
사용자

1
이미지가 db 또는 디스크에서 많은 공간을 차지한다는 것을 알고 있습니까? 직 감상, Rails는 캐싱을 처리하기 위해 PHP만큼 아파치에 의존하지 않기 때문에 데이터베이스에 저장한다고 말합니다. 그래도 완전히 잘못되었을 수 있습니다.
Florian Margaine

2
예, 이미지 데이터가 저장 위치에 의해 조작 될 것이라고 생각하지 않습니다. 레일은 다를 수 있지만 신뢰할 수있는 일부 SO 멤버 는 데이터베이스의 파일 경로에 의존하는 것 같습니다. 또한 데이터베이스를 확장하기가 어렵다는 것이 일반적인 지식이므로 데이터베이스에 수많은 이미지 데이터를 저장하는 것이 더 쉬워지는 것은 아닙니다.
사용자

답변:


4

과거에 한 일은 Amazon S3CloudFront CDN 과 함께 PaperClip을 사용 하여 더 빠른 전송을하는 것입니다. PaperClip은 S3 스토리지를 즉시 지원합니다 . S3 스토리지 구성 옵션에 대한 설명서를 참조하십시오 .

  1. 이미지 요청을 S3 버킷으로 전달하고 정적 자산에 대한 기타 요청을 Ruby on Rails 애플리케이션으로 전달하도록 CloudFront 배포를 설정하십시오 (또는 S3에 업로드 할 수도 있지만이 질문의 범위를 벗어납니다).
  2. CloudFront 배포를 가리 키도록 제어하는 ​​도메인 (예 : asset.example.com)을 CNAME 하십시오.
  3. PaperClip 구성에서을 설정하십시오 s3_host_alias: assets.example.com. 이로 인해 생성 된 URL 이 저장된 이미지 리소스에 CloudFront 배포 호스트를 사용하게됩니다.
  4. Ruby on Rails 구성에서을 수행 할 수 있습니다 config.action_controller.asset_host = http://assets.example.com. 그러면 Ruby on Rails 자산 URL도 캐싱 / 빠른 전달을 위해 CloudFront 배포를 사용합니다.

그것은 꽤 스케치 적이지만, 유용한 자료의 방향을 알려주기를 바랍니다. 물론, 그것은 하나의 솔루션이지만 데이터베이스에서 수십만 개의 이미지 첨부 파일을 처리하는 상황에서 저에게 도움이 된 솔루션입니다.

(필요하거나 귀하의 경우에 유용 할 수 없습니다 가능한 고급 단계로, 당신은 또한 같은, 당신의 CloudFront를 배포에 대해 여러 CNAME이를 설정할 수 있습니다 assets0.example.comassets1.example.com. 모두 클립을 s3_host_alias하고 action_controller.asset_host다음 결정 론적으로 (에 기초 할 수 람다 걸릴 수 있습니다 브라우저는 브라우저가 동일한 호스트에 대한 최대 동시 연결을 제한하기 때문에 동일한 페이지에서 여러 페이지를 다운로드하는 경우 병렬화를 개선하기 위해 다른 호스트를 사용하는 URL을 생성하십시오.)


3

몇 가지 보석을 시도했지만 이제는 PaperClip 과 함께 FineUploader를 사용 하고 있습니다.

FineUploader는 업로드 진행률, 드래그 앤 드롭 및 여러 파일 업로드 등과 같은 많은 GUI를 처리합니다. S3 대신 서버에 이미지를 저장하려고하기 때문에 PaperClip을 사용하고 있습니다.

우리가 일반적으로하는 일은 처음부터 물건을 다시 만드는 대신 안정적인 기본 구성 가능한 솔루션을 찾는 것입니다. PaperClip을 사용하면 이미지를 저장하고 StateMachine을 사용하여 이미지를 변환하고 파일 이름을 기준으로 범주에 넣습니다. 나는 당신이 가진 것과 같은 질문을했고 이것이 최선의 해결책이었습니다. 그래서 나는 그것을 공유합니다.


2
이것은 외부 패키지가 작업을 수행하기위한 권장 사항입니다. OP는 Ruby on Rails 개발자가 권장 사항이 아닌 이미지를 저장하기 위해 일반적으로 수행하는 작업을 요구했습니다. 이것은 하나의 패키지가 어떻게 작동하는지에 대한 예일 수도 있지만 실제로 질문에 대한 답은 아닙니다.
Martijn Pieters

진실. 우리가 일반적으로하는 일은 처음부터 물건을 다시 만드는 대신 안정적인 기본 구성 가능한 솔루션을 찾는 것입니다. PaperClip을 사용하면 이미지를 저장하고 StateMachine을 사용하여 이미지를 변환하고 파일 이름을 기준으로 범주에 넣습니다. 나는 OP와 같은 질문을했고 이것이 최선의 해결책이었다. 이것이 내가 그것을 공유하는 이유이다.
JeroenKnoops
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.