문제

컨트롤러에서 동적 이미지를 생성하기 위해 rmagick gem을 사용하고 있습니다.컨트롤러는 ID를 매개변수로 사용하고, 모델을 조회하고, 기존 이미지 위에 텍스트를 쓴 후 출력합니다.

모든 요청에 ​​대해 생성하는 것과 디스크에 쓰고 사용하는 것을 비교하는 몇 가지 벤치마크를 실행했습니다. send_data 이미 존재하는 경우 출력합니다.나는 이 두 가지 방법 사이에 요청/초의 차이가 별로 없다는 것을 발견했습니다.

모든 요청에 ​​대해 이미지를 동적으로 생성하는 대신 이미지를 캐싱하거나 디스크에 쓰는 모범 사례가 있습니까?일단 생성되면 이러한 이미지는 대부분 정적으로 유지되지만 특정 시간 간격 후에 다시 생성할 수 있는 옵션도 원합니다.

도움이 되었습니까?

해결책

가장 좋은 방법은 생성된 이미지를 캐시하고 웹서버가 해당 이미지를 제공하도록 허용하는 것입니다.

Rails 앱 앞에 Apache 또는 Nginx와 같은 웹 서버를 사용하고 웹 서버가 이미지를 제공할 수 있는 위치에 이미지를 작성해야 합니다.따라서 Rails 경로가 다음과 같이 평가되면 /dynamic_images/3.png (전화 dynamic_images_controller 행동 show id=3, format=png), 해당 이미지를 public/dynamic_images/3.png 그리고 사용 send_file 컨트롤러에서 보내세요.

다음에 해당 파일이 요청될 때(/dynamic_images/3.png), 웹 서버는 이를 기꺼이 제공하고(캐시됨) Rails 앱은 절대 공격을 받지 않습니다.

이미지 재생성 및 컨트롤러 코드 정리와 같은 고급 요구 사항에 대해서는 다음을 살펴보십시오. 클립 보석.

다른 팁

그냥 아이디어입니다(시도해본 적 없음):왜 memache를 사용하여 이미지(특히 동적으로 생성된 이미지)를 저장하지 않습니까?

Rails.cache.write("MY_IMAGE", 이미지)

캐시된 이미지를 웹 서버에서 제공할 디렉터리에 넣어야 합니다.이를 위해 send_data를 사용하고 싶지 않습니다. 너무 느립니다.또한 VCS에서 해당 디렉토리를 무시하고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top