2011-03-22 4 views
4

간단한 레일 3 앱과 함께 앉아 여기에 간단한 갤러리 모델이 있고 각 갤러리에는 많은 이미지가 있습니다. 이미지 모델은 클립으로 내 galleries_controller에서 다음과 같은 옵션 클립 클립으로 매우 천천히 (유니콘)

has_attached_file :local, 
    :styles => { 
    :large => "800x800>", 
    :medium => "300x300>", 
    :thumb => "100x100#", 
    :small => "60x60#" 
    } 

으로 확장 나는 jQuery-File-Upload 플러그인 작업을하기 위해 구현 된 다음과 같은 조치를해야합니다. 이로써 json 응답.

def add_image 
    gallery = Gallery.find params[:id] 
    image = gallery.images.new({:local => params[:local]}) 
    if image.save 
    render :json => {:thumb => image.url(:thumb), :original => image.url} 
    else 
    render :json => { :result => 'error'} 
    end 
end 

나에게 이것은 상당히 간단합니다. 그러나 여기에 문제가 있습니다. mongrel에서의 개발에서 어떤 종류의 업로드도 500-1000ms/업로드로 잘 작동합니다.

그러나 생산에 투입 할 때마다 유니콘 작업 시간 초과가 계속 발생하고 이미지를 전송할 때 한 파일 당 30-55 초가 소요됩니다. 내가 업로드

파일은 약 100,000 크기 내 VPS와 ipref 내 dev에 컴퓨터 사이의 대역폭을 몇 가지 테스트를 수행하고 업로드가 안됩니다 그래서 77kbps에 대한 평균 속도를 가지고있다

입니다 문제.

참고 아바타가있는 사용자 모델과 동일한 앱을 사용하여 비 아약스 파일 업로드로 테스트를 수행했습니다. 개발 => 21618ms

사람에서 발견 (302)을 완료 693ms 생산 =>에서 발견 (302)을 업로드 파일 (유니콘, rails3)와 비슷한 문제를 경험 완료?

+0

당신은 당신이 다음 (자신의 답변을 받아 들일 수 있습니다) 동의하는 응답 우는 소리에 다음 답변을 상단에있는 질문을 넣어 sohuld –

+0

감사합니다 존, 그것을 엉망 죄송합니다, I 마침내 질문을 (나는 희망) 스택 오버플로 형식을 준수하는 시간이 걸렸습니다. –

+1

은 업로드와 관련이 없다는 것을 알아 냈고, 병목 현상은 각 변환 작업에 대해 약 10 초 이상 걸릴 것으로 보입니다. digg를 더 깊게 업데이트하고 업데이트하십시오. –

답변

4

주위를 파고 나서 VPS에서 ImageMagick의 OpenMP Option이 매우 느린 작업을 일으키고 있다고 판단했습니다. 그래서 첫 번째 시도는 --disable-openmp 플래그가 추가 된 원시 우분투 10.04 패키지를 다시 빌드하는 것이 었습니다. 이것은 몇 가지 이유로 실패했는데 왜 패키지가 계속 openMP로 계속 나오는지 확신 할 수 없었습니다. 내 현재의 해결책은 대신 우분투 10.10에서 ImageMagick을 백 포트하는 것입니다.

1 단계 다운로드 다음 파일 :

  • imagemagick_6.6.2.6-1ubuntu1.1.dsc
  • imagemagick_6.6.2.6.orig.tar 다음은 내가 수행 한 단계를 따릅니다. bz2
  • imagemagick_6.6.2.6-1ubuntu1.1.debian.tar.here

    단계에서 BZ2

2

$ cd imagemagick-6.6.2.6 
$ vim debian/rules 

가로하여 follwing을 줄을 추가 규칙 패키지를

$ dpkg-source -x imagemagick_6.6.2.6-1ubuntu1.1.dsc 

3 단계 편집을 풀고 ./ 25-39 행에 statment를 설정하십시오. 나는 34

34: --disable-openmp \ 

4 단계 새로운

으로, 이전에 아웃

$ sudo apt-get install liblqr-1-0-dev librsvg2-dev 
$ dpkg-buildpackage -b 

5 단계 (나는 이러한 종속성이 필요) 종속성을 추가하고 구축 라인에 내 추가

$ sudo apt-get remove --purge imagemagick 
$ sudo dpkg -i libmagickcore3_6.6.2.6-1ubuntu1.1_amd64.deb 
$ sudo dpkg -i libmagickwand3_6.6.2.6-1ubuntu1.1_amd64.deb 
$ sudo dpkg -i imagemagick_6.6.2.6-1ubuntu1.1_amd64.deb 

단계 6 다시 한번 빠른 이미지 변환 의

_before_ (with openmp) 
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb' 
real 0m11.602s 
user 0m11.414s 
sys 0m0.069s 

_after_ 
$ time utilities/convert 'image.jpg' -resize "x60" -crop "60x60+10+0" +repage 'thumb' 
real 0m0.077s 
user 0m0.058s 
sys 0m0.019s 
+0

위대한 해결책은 나를 도왔습니다! 대안으로 ImageMagick을 소스에서'configure --prefix =/opt/imagemagick --disable-openmp'로 컴파일하고 심볼릭 링크'ln -s/opt/imagemagick/bin/convert/usr/bin/convert' – paulus

0

처리 시간이 오래 걸리면 별도의 작업자로 축소판을 처리하는 것이 좋습니다.

요청 : 수락 파일; 그것을 디스크에 저장; 대기열에 작업 게시 작업자 : 대기열에서 팝 작업; 엄지 손톱을 창조하십시오; 반복

지연 : 작업 및 재개발은 이에 대한 훌륭한 솔루션입니다.

+0

Ariejan 주석에 감사드립니다.하지만이 작업은 배경 작업자를 배치 할 필요가 없습니다. 나는 그것에 대해 생각 해왔다. –