8

Użyłem gemara 0W0 z ceną nośnika z RMagic do przesyłania obrazów na AWS S3. Wszystko działało dobrze, z tym, że przesłanie go na AWS S3 zajęło zbyt dużo czasu. Więc pomyślałeś, korzystając z backgroundware carrierwave do przesyłania zdjęć w tle. Ustawiłem backgroundware nośnika (0.4.2), ale w tym jednym z moich oryginalnych plików zawsze przesyłam S3, ale wersje tego obrazu nigdy nie zostaną przesłane na S3.CarrierWave Backgrounder nie ładuje obrazów wersji do AWS S3

Oto moja carrierwave_backgrounder.rb

CarrierWave::Backgrounder.configure do |c| 
    c.backend :sidekiq, queue: :carrierwave 
end 

Mam zdefiniowane moją kolejkę w sidekiq.rb

Sidekiq.configure_server do |config| 
config.redis = { :url => "redis://#{ENV['REDIS_ENDPOINT']}:6379", :namespace=> "#{ENV['REDIS_NAMESPACE']}" } 
config.options = 
queues: %w{ 
    critical 
    carrierwave 
    } 
}) 
end 

Oto moja photo_uploader.rb

class PhotoUploader < CarrierWave::Uploader::Base 
    include ::CarrierWave::Backgrounder::Delay 
    include CarrierWave::RMagick 
    storage :fog 

    def store_dir 
    "uploads/images/" 
    end 

    def filename 
    "#{secure_token}.#{file.extension}" if original_filename.present? 
    end 

    def orient_image 
    manipulate! do |img| 
     img.auto_orient 
     img 
    end 
    end 

    # Create different versions of your uploaded files: 
    version :thumb_small do 
    process :resize_to_fill => [100,100] 
    process :strip 
    end 

    def strip 
    manipulate! do |img| 
     img.strip! 
     img = yield(img) if block_given? 
     img 
    end 
    end 

    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    def get_version_dimensions 
    model.width, model.height = `identify -format "%wx%h " #{file.path}`.split(/x/) 
    end 

    protected 
    def secure_token 
     var = :"@#{mounted_as}_secure_token" 
     model.instance_variable_get(var) || model.instance_variable_set(var, SecureRandom.hex(5)) 
    end 
end 

Oto mój profil Plik .rb

mount_uploader :image_url, PhotoUploader 
process_in_background :image_url 

zacząłem pracownika sidekiq poleceniem

bundle exec sidekiq -d -L log/sidekiq.log -C config/sidekiq.yml -e development 

Kiedy przesłać image_url tylko oryginalny obraz zostanie przesłany. To jest dziennik sidekiq po wczytaniu oryginalnego pliku. Ale nie widzę żadnego pliku wersji. Sprawdziłem również S3 bucket (brak wersji pliku tylko oryginalnego)

2016-01-11T08:52:20.772Z 3983 TID-ownpyrrxk CarrierWave::Workers::ProcessAsset JID-91e3803d50defb2d1419cef1 INFO: start 
2016-01-11T08:52:31.119Z 3983 TID-ownpyrrxk CarrierWave::Workers::ProcessAsset JID-91e3803d50defb2d1419cef1 INFO: done: 10.347 sec 

Czy jest coś, czego mi brakuje. Proszę o pomoc z góry dzięki

+0

Brzmi jak błąd, czy próbowałeś debugować klejnot? Szukał dziwnych got'chów takich jak ten? https://stackoverflow.com/questions/15490972/carrierwave-processed-images-not-uploading-to-aws-s3?rq=1 – bbozo

+0

@rohit kumar Czy nadal masz ten problem? Stoję w obliczu tego teraz i nie mam pojęcia, jak go rozwiązać. Czytał przez cały dzień, ale nic nie znaleziono. –

Odpowiedz

0

Po zbadaniu z kilku dokumentacji, tutaj jest moja propozycja:

Od careerwave_backgrounder readme: https://github.com/lardawge/carrierwave_backgrounder#background-options

Jego jasno pokazuje,

# This stores the original file with no processing/versioning. 
# It will upload the original file to s3. 

Od tego #113, autor powiedział:

I found a bug related to Rmagick but no issue with versions 

Możesz spróbować z MiniMagick/ImageMagick zamiast z RMagick.

Dokumentacja szukać podobnego problemu:

https://github.com/lardawge/carrierwave_backgrounder/issues/113

https://github.com/lardawge/carrierwave_backgrounder/issues/130

Rails CarrierWave versions are not created for some reason

Dzięki!

+0

wypróbowany minimagick również z tym samym problemem. –