sidekiqのバックグラウンド プロセスで、carrierwave_backgrounderを使用して S3 に画像をアップロードしています。
これが私のbackground_uploader.rbクラスです...
class BackgroundUploader < CarrierWave::Uploader::Base
include ::CarrierWave::Backgrounder::Delay
include CarrierWave::RMagick
include CarrierWave::MimeTypes
process :set_content_type
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
storage :fog
def store_dir
"uploads/backgrounds/#{model.id}"
end
def default_url
"/assets/default.jpg"
end
process :resize_to_fit => [1024, 1024]
process :convert => 'jpg'
process :fix_exif_rotation
def extension_white_list
%w(jpg jpeg png)
end
def filename
@name ||= Digest::MD5.hexdigest(File.dirname(current_path.to_s))
"#{@name}.#{file.extension}" if original_filename
end
# Rotates the image based on the EXIF Orientation & applies gaussian blur
def fix_exif_rotation
manipulate! do |img|
img.auto_orient!
img = yield(img) if block_given?
img = img.gaussian_blur(0.0, 20.0)
img
end
end
end
Carrierwave_backgrounder.rb :
CarrierWave::Backgrounder.configure do |c|
c.backend :sidekiq, queue: :carrierwave
end
background.rbには以下が含まれます:
mount_uploader :image, BackgroundUploader
process_in_background :image
次に、実行sidekiq -q carrierwave
してバックグラウンド ワーカーを起動します。すべてがうまくいっています!ファイルをアップロードすると、キューがそれを受け入れて作業を開始するのがわかります...
すぐに AWS S3 コンソールを開くと、そこに元のファイルが表示されます。サイズ変更なし、ぼやけなし。ジョブが完了したら... S3 を更新すると、サイズ変更/ぼかしバージョンが表示されます。両方の画像がそこにありますが、ぼやけた画像だけがそこにあるようにしたいです。私の見解では、私は使用しています...
<%= image_tag(@background.image.to_s) %>
元のファイルを表示します。ファイルを削除するチェックボックスをオンにすると、必要に応じて削除されます (S3 からオリジナルが削除されます) が、ぼやけたバージョンはそこに残ります。
S3にアップロードされるもの...
- original.jpg (すぐに...これはアップロードしたくありません)
- modified.jpg (ジョブ完了後)
簡単に言うと、元のファイルを S3 にアップロードしたくありません。