2017-10-26 7 views
1

사진에 클립 클립을 사용하는 항목에 대한 시드 데이터가 많이 있습니다 (샘플 데이터가 아닌 실제 시드 데이터). 우리는 클립으로 S3를 사용하도록 설정되어 있습니다. 씨앗을 적재하려면 commonly suggested way이 이미 느리고 이미 톤을 더 추가하려고합니다. 씨앗은 이미 5 분 정도 걸리므로이 후 1 ~ 2 시간이 걸리기 때문에 표준 분기 작업 스타일 워크 플로우는 실제로 비실용적입니다. 가능한 경우 S300을 개발 모드로 전환 할 수 있지만 production에 가깝게 development 환경을 유지하십시오.S3에 클립 클립 씨앗을 가속화합니다.

저는 매번 업로드 과정을 거치지 않고도 S3 링크를 재사용 할 수있는 방법이 있는지 클립 클립 문서를 살펴본 결과 아무것도 찾지 못했습니다. 이것을 해결할 수있는 "표준"또는 친숙한 방식의 클립이 있습니까? Paperclip/S3를 사용하여 대량의 시드 파일을 어떻게 해결 했습니까?

감사합니다.

답변

1

내가 실수하지 않으면 종이 클립은 이미지의 파일 이름을 데이터베이스의 열에 저장합니다. 이 경우 "일반적으로 권장되는 방법"을 사용하여 데이터베이스를 한 번 시드 할 수 있습니다. Paper Clip이 데이터베이스를 시드하고 S3에 데이터를 업로드하면 데이터베이스에 파일 이름, 파일 크기 및 기타 파일 메타 데이터를 쿼리 할 수 ​​있습니다.

데이터베이스의 기존 데이터를 사용하여 새 시드 파일을 생성하여 레코드 값을 직접 할당 할 수 있습니다 (즉, Paperclip을 활용하지 않음).

Paperclip을 처리하지 않고 새 레코드를 만들려면 this example을 따르는 것이 좋습니다. 내가 테스트하지 않았습니다

@images_we_want_to_seed.each do |img| 
    puts "Image.create(" 
    puts " skip_image_processing: true, 
    puts " asset_file_name: img.asset_file_name, 
    puts " asset_file_size: img.asset_file_size, 
    puts " asset_content_type: image.asset_content_type, 
    .... 
    puts ")" 
    puts " " 
end 

,하지만이 작동합니다 : 당신은 심지어이 같은 자동으로이 두 번째 시드 파일을 생성 할 수 있습니다

attr_accessor :skip_image_processing 

before_asset_post_process :skip_image_processing? 

def skip_image_processing? 
    self.skip_image_processing 
end 

: 모델에 다음을 추가합니다.

+0

답장을 보내 주셔서 감사합니다. 'before _ * _ post_process'를 사용하는 것은 사려 깊은 아이디어이지만, S3에 업로드되는 파일을 방지하지는 않습니다. 사용하지 않는 이미지 처리 만 가능합니다. 또한 Paperclip은 파일 이름을 데이터베이스에 저장하지만 S3가 파일에 부여한 고유 ID는 저장하지 않습니다. 데이터베이스에서는 'Something.jpg'이지만 S3에서는 'Something.jpg? 1509052552'입니다. 불행히도 데이터베이스에서 덤프 된 씨앗으로 데이터베이스를 복원하는 것은 작동하지 않습니다. – brainbag