Skip to content

Commit

Permalink
chore: джоб для очистки локальных файлов
Browse files Browse the repository at this point in the history
  • Loading branch information
DmitryBochkarev committed Dec 22, 2015
1 parent 8b3f710 commit 3a3a9c1
Show file tree
Hide file tree
Showing 9 changed files with 101 additions and 18 deletions.
1 change: 0 additions & 1 deletion app/jobs/amazon_s3_upload_job.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# coding: utf-8
require 'resque-integration'

class AmazonS3UploadJob
include Resque::Integration
Expand Down
15 changes: 15 additions & 0 deletions app/jobs/apress/amazon_assets/clean_private_assets_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# coding: utf-8

module Apress
module AmazonAssets
class CleanPrivateAssetsJob
include Resque::Integration

unique

def self.execute
CleanLocalFilesService.new(PrivateAsset, PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE).call
end
end
end
end
15 changes: 15 additions & 0 deletions app/jobs/apress/amazon_assets/clean_public_assets_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# coding: utf-8

module Apress
module AmazonAssets
class CleanPublicAssetsJob
include Resque::Integration

unique

def self.execute
CleanLocalFilesService.new(PublicAsset, PublicAsset::STORAGE_TIME_OF_LOCAL_FILE).call
end
end
end
end
27 changes: 27 additions & 0 deletions app/services/apress/amazon_assets/clean_local_files_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# coding: utf-8

module Apress
module AmazonAssets
class CleanLocalFilesService
# Чистка локальных файлов по дате обновления
# scope - начальный скоуп
# storage_time_of_local_file - время хранения локальных файлов
def initialize(scope, storage_time_of_local_file)
@scope = scope
@storage_time_of_local_file = storage_time_of_local_file
end

def call
@scope
.where(
"remote_file_name IS NOT NULL AND local_file_name IS NOT NULL AND local_updated_at < ?",
@storage_time_of_local_file.ago.utc
)
.find_each do |asset|
asset.local = nil
asset.save(:validate => false)
end
end
end
end
end
2 changes: 1 addition & 1 deletion apress-amazon_assets.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'webmock'
spec.add_development_dependency 'appraisal', '>= 1.0.2'
spec.add_development_dependency 'combustion', '>= 0.5.3'
spec.add_development_dependency 'simplecov'
spec.add_development_dependency 'simplecov', '~> 0.10.0'
spec.add_development_dependency 'vcr'
end
2 changes: 1 addition & 1 deletion lib/apress-amazon_assets.rb
Original file line number Diff line number Diff line change
@@ -1 +1 @@
require 'apress/amazon_assets'
require 'apress/amazon_assets'
2 changes: 1 addition & 1 deletion lib/apress/amazon_assets.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

require 'active_record'
require 'paperclip'
require 'resque'
require 'resque-integration'

module Apress
module AmazonAssets
Expand Down
16 changes: 2 additions & 14 deletions lib/apress/amazon_assets/tasks.rake
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,14 @@ namespace :amazon do
namespace :private_assets do
desc "Ежедневное удаление вложений с нашего сервера"
task :autoclean => :environment do
Apress::AmazonAssets::PrivateAsset.
where("remote_file_name IS NOT NULL AND local_file_name IS NOT NULL AND local_updated_at < ?",
Apress::AmazonAssets::PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE.ago.utc).
find_each do |asset|
asset.local = nil
asset.save(:validate => false)
end
Apress::AmazonAssets::CleanLocalFilesService.new(PrivateAsset, PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE).call
end
end

namespace :public_assets do
desc "Ежедневное удаление вложений с нашего сервера"
task :autoclean => :environment do
Apress::AmazonAssets::PublicAsset.
where("remote_file_name IS NOT NULL AND local_file_name IS NOT NULL AND local_updated_at < ?",
Apress::AmazonAssets::PublicAsset::STORAGE_TIME_OF_LOCAL_FILE.ago.utc).
find_each do |asset|
asset.local = nil
asset.save(:validate => false)
end
Apress::AmazonAssets::CleanLocalFilesService.new(PublicAsset, PublicAsset::STORAGE_TIME_OF_LOCAL_FILE).call
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# coding: utf-8
require 'spec_helper'

describe Apress::AmazonAssets::CleanLocalFilesService do
context 'delete old assets' do
let(:old_asset) do
create :private_asset,
:with_local_png,
local_updated_at: (Apress::AmazonAssets::PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE.ago.utc - 1.day)
end
let(:not_old_asset) do
create :private_asset,
:with_local_png,
local_updated_at: (Apress::AmazonAssets::PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE.ago.utc + 1.day)
end

before do
allow_any_instance_of(Apress::AmazonAssets::PrivateAsset).to receive(:queue_upload_to_s3)
VCR.use_cassette 'copy_to_remote', erb: {path: old_asset.local.url.sub(%r{.*/system/}, '')} do
old_asset.copy_to_remote
end
VCR.use_cassette 'copy_to_remote', erb: {path: not_old_asset.local.url.sub(%r{.*/system/}, '')} do
not_old_asset.copy_to_remote
end
described_class.new(
Apress::AmazonAssets::PrivateAsset,
Apress::AmazonAssets::PrivateAsset::STORAGE_TIME_OF_LOCAL_FILE
).call
end

it do
expect(old_asset.reload.local_file_name).to be_nil
end

it do
expect(not_old_asset.reload.local_file_name).not_to be_nil
end
end
end

0 comments on commit 3a3a9c1

Please sign in to comment.