2013-03-22 3 views
6

어젯밤에 app 및 db (mongodb) 서버가 재부팅되었습니다. 파일이 아직 존재하더라도 모든 캐리어 웨이브 탑재 업 로더는 아바타의 기본 이미지를 반환합니다.재부팅 후 Carrierwave 재설정

Rackspace CDN에서 안개 저장 장치를 사용하고 있습니다. 각 사용자 모델의 필드는 avatar_filename입니다. 나는 user.avatar.recreate_versions!을 실행하려고했으나 그 때문에 오류가 발생했습니다.

내 이미지를 복원 할 수있는 방법이 있습니까 (여전히 존재합니다!). 다시 발생하지 않도록 할 수 있습니까? 나는 주변을 수색했으나 이것이 일반적인 무도회처럼 보이지 않는다. 내 사용자 모델에서

:

# Avatar 
mount_uploader :avatar, AvatarUploader 

AvatarUploader는 :

class AvatarUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 

    storage :fog 

    def default_url 
    "/assets/users/profile-default_#{version_name}.png" 
    end 

    # Large 
    version :large do 
    resize_to_limit(600, 600) 
    end 

    # Small 
    version :small do 
    process :crop 
    resize_to_fill(140, 140) 
    end 

    # Thumbnail 
    version :thumb, :from_version => :small do 
    resize_to_fill(35, 35) 
    end 

    def extension_white_list 
    %w(jpg jpeg png) 
    end 

    def filename 
    if @filename_created 
     @filename_created 
    elsif original_filename 
     @name ||= Digest::MD5.hexdigest(File.dirname(current_path)) 
     @filename_created = "a_#{timestamp}_#{@name}.#{file.extension}" 
     @filename_created 
    end 
    end 

    def timestamp 
    var = :"@#{mounted_as}_timestamp" 
    model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i) 
    end 

    def crop 
    if model.crop_x.present? 
     resize_to_limit(600, 600) 
     manipulate! do |img| 
     x = model.crop_x.to_i 
     y = model.crop_y.to_i 
     w = model.crop_w.to_i 
     h = model.crop_h.to_i 
     img.crop!(x, y, w, h) 
     end 
    end 
    end 
end 
+0

중요한 것부터 먼저. 모델에 : avatar_filename 필드가있는 경우 : avatar 필드에서 mount_uploader를 호출하는 이유는 무엇입니까? 두 번째 - Uploader에서 파일 이름을 두 번 정의하고 있습니다 - default_url 및 파일 이름 방식. 필요한 이유를 이해할 수 없으며 문제의 일부일 수도 있습니다. – Almaron

+0

@Almaron''avatar_filename''은 업 로더를 마운트 한 결과 carrierwave/carrierwave_mongoid에 의해 생성되었습니다. 기본 URL은 아직 업로드하지 않은 사용자에게 빈 아바타를 제공하는 것입니다. –

답변

1

감안할 때 이미지가 있다는 것을, 당신은이를 방지하기 위해 user.remote_avatar_url = "the url for this avatar"

와 원격 파일로 다시 업로드 할 수 미래에는 파일 이름을 처리하는 방법을 명심해야합니다. 이 과정은 당신이 recreate_versions!을 할 때마다 다시 적용됩니다. 이 문제를 해결 얻을 수 있도록 업 로더에이 코드를 넣어 :

class AvatarUploader < CarrierWave::Uploader::Base 
    def filename 
    if original_filename 
     if model && model.read_attribute(:avatar).present? 
     model.read_attribute(:avatar) 
     else 
     # new filename 
     end 
    end 
    end 
end 

다음과 같은 위키 기사에서이에 대한 자세한 정보를 얻을 수 있습니다 https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Create-random-and-unique-filenames-for-all-versioned-files

관련 문제