2012-01-02 1 views
3

레일 웨이 3 애플리케이션에서 carrierwave를 사용하여 원격 소스의 파일을 서버의 파일 시스템에 업로드하고 저장합니다. 이미지가 연관된 모델에 업 로더가 탑재 된 전적으로 표준 인 설정이 있습니다.carrierwave 업 로더가 파일을 업로드하지만 default_url을 계속 출력합니다.

완벽하게 99.9 %의 시간 동안 작동하지만 600 번째 그래프마다 앱이 저장된 이미지를 지속적으로 제공하지 못하는 문제가 발생합니다. 파일 시스템을 검사하면 그래프 이미지가 올 바르고 올바른 위치에 올바른 파일 권한과 모든 것을 저장하지만 레일은 완전히 인식하지 못하고 해당 인스턴스에 대한 기본 그래프 이미지를 계속 제공합니다.

즉, ID가 123 인 그래프의 이미지는 /uploads/graphs/123/graph.png에 저장되어 있습니다. 정확한 이미지는 있지만 레일에 관한 한 저장된 이미지가 없습니다. 다른 모든 그래프 이미지는 여전히 정상적으로 작동하지만 레일스가 123에 저장된 이미지를 인식하지 못합니다. 이미지를 제거하고 다시 저장해도 작동하지 않습니다. 수동으로 이미지를 제거하고 다시 업로드하면 작동하지 않습니다. 나는 완전히 잃어 버렸다. 그래프 인스턴스가 유효합니다. 로그를 저장할 때 오류가 없습니다. 예를 들어

콘솔에서 :

g = Goal.find_by_id("123") 
g.remote_graph_url = "http://image.source/url.png" 
> "http://image.source/url.png" 
g.save 
> true 
g.graph? 
> false 
g.graph_url >> /default/image.png 

여기에 관련 코드입니다 :

class GraphUploader < CarrierWave::Uploader::Base 
    def store_dir 
    "../uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
    def default_url 
    "/images/" + [version_name, "default_large_graph.png"].compact.join('_') 
    end 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 
    def filename 
    "graph.png" if original_filename 
    end 
end 

class Graph 
    mount_uploader :graph, GraphUploader 
end 

답변

0

위시 난 그냥 대답 할 수는 ...의 외부

그래서 당신이 저장하는 업로드 공개 디렉토리? 귀하의 의도가 아닌 경우 "../"이미지를 제거하십시오.

+0

예, 내가 원하는 곳에 저장하고 있습니다. 그리고 다시, 그것은 실패한 1/600 것입니다. 너무 이상합니다! – Bee

+0

흠 ... gif/jpegs를 png로 변환하지 않고 파일 이름으로 png를 사용하고 있습니다 ... 우연히 그 이유가 무엇일까요? – omarvelous

+0

이미지가 png로 생성되므로 파일 이름으로 png를 사용하고 있습니다. 다시 말하지만 업로드 된 이미지의 99.9 %에서 작동하지만 블루 문 (8200 개 중 8 개)에서는 특정 목표에 도달하지 못하고 지속적으로 모델을 업데이트하지 않고 기본 이미지를 계속 제공합니다. 나는 아직 그것을 아직 해결하지 못했다 :-) – Bee