2017-01-07 3 views
0

Carrierwave 버전 1.0.0rc를 사용하여 AWS S3 버킷에 파일을 업로드하고 처리합니다. 여기에 내 환경 :Carrierwave가 fog/aws gem을 사용하여 S3에 업로드하면 "No such file or directory @ rb_sysopen"이됩니다.

레일 4.2.0 루비 2.1.1 MiniMagick은 4.5.1 ImageMagick를 6.9.7-0

업로드 할 원본 이미지가 가로 또는 세로이고 가만히 있으면 내 업 로더 결정 그에 따라 처리 규칙을 적용하십시오. 파일 AWS S3 버킷에 업로드하지만 그때 나는 다음과 같은 오류를 얻을 : SponsorsController 번호에

errno를 :: ENOENT 없음 같은 파일 또는 디렉터리 @ rb_sysopen을 만들 수 없습니다 - 업로드/스폰서/로고/30/Breen_Electrical_Logo.jpg

추출 된 소스 코드가 강조 표시 :

class LogoUploader < CarrierWave::Uploader::Base 

    include CarrierWave::MiniMagick 
    storage :fog 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :landscape, if: :is_landscape? 

    version :portrait, if: :is_portrait? 

    version :landscape do 
     process resize_to_fit: [200, 50] 
    end 

    version :landscape_sm, from_version: :landscape do 
     process resize_to_fit: [100, 25] 
    end 

    version :portrait do 
     process resize_to_fit: [50, 200] 
    end 

    version :portrait_sm, from_version: :portrait do 
     process resize_to_fit: [25, 100] 
    end 

    private 

    def is_landscape? picture 
     image = MiniMagick::Image.open(picture.path) 
     image[:width] > image[:height] 
    end 

    def is_portrait? picture 
     image = MiniMagick::Image.open(picture.path) 
     image[:width] < image[:height] 
    end 
    end 

홍보 :

여기
 image = MiniMagick::Image.open(picture.path) 

내 업 로더 코드 ivate 메소드는 폭과 높이 값을 비교하기 위해 파일을 여는 것처럼 보입니다. 이 작업은 로컬 공용 폴더에 파일을 저장할 때 잘 수행되었습니다. "picture.path"url이 파일을 열 때 S3 버킷 경로를 가리키고 있지 않습니다.

여기 내 /config/initializers/carrierwave.rb 파일

저도 같은 문제를 가진 다른 사람을 찾을 수 없습니다
require 'fog/aws' 

CarrierWave.configure do |config| 
    config.fog_provider = 'fog/aws'    
    config.fog_credentials = { 
    provider:    'AWS',    
    aws_access_key_id:  <access_key_id>,  
    aws_secret_access_key: <secret_access_key>,  
    region:    'us-west-2',     
    :path_style   => true 
    } 
    config.fog_directory = <bucketname> 
end 

입니다. 어떤 아이디어? 미리 감사드립니다.

답변

0

로컬이 아니기 때문에 경로 대신 파일을 직접 참조해야한다고 생각합니다. 같은 뭔가 :

ruby image = MiniMagick::Image.open(picture.file)

+0

는 MiniMagick의 파일 방법이있을 나타나지 않습니다. 내가 설명하는대로 사용하려고하면 오류가 발생합니다. –

+0

나는 당신의 코드를 읽는 것으로부터'그림'이 carrierwave 객체 (minimagick 객체가 아닌)가 될 것이라고 생각했다. 그래서 나는 적어도 carrierwave 오류가 발생할 것이라고 생각합니다. – geemus

관련 문제