From b57b54113fd473ac3bee54833ad488ea8b56872e Mon Sep 17 00:00:00 2001 From: r888888888 Date: Tue, 7 Feb 2017 17:26:16 -0800 Subject: [PATCH] add cdn hosted flag to posts --- app/models/amazon_backup.rb | 3 ++- app/models/post.rb | 7 ++++++- lib/tasks/images.rake | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/app/models/amazon_backup.rb b/app/models/amazon_backup.rb index 175a99f89..44f16921b 100644 --- a/app/models/amazon_backup.rb +++ b/app/models/amazon_backup.rb @@ -21,7 +21,8 @@ class AmazonBackup < ActiveRecord::Base region: "us-east-1", credentials: credentials }) - client = Aws::S3::Client.new + logger = Logger.new(STDOUT) + client = Aws::S3::Client.new(logger: logger) bucket = Danbooru.config.aws_s3_bucket_name Post.where("id > ?", last_id).limit(1000).order("id").each do |post| diff --git a/app/models/post.rb b/app/models/post.rb index c23cd69bd..efac68d31 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -105,7 +105,11 @@ class Post < ActiveRecord::Base end def file_url - "/data/#{seo_tag_string}#{file_path_prefix}#{md5}.#{file_ext}" + if cdn_hosted? + Danbooru.config.danbooru_s3_base_url + "/#{file_path_prefix}#{md5}.#{file_ext}" + else + "/data/#{seo_tag_string}#{file_path_prefix}#{md5}.#{file_ext}" + end end def large_file_url @@ -1709,6 +1713,7 @@ class Post < ActiveRecord::Base BOOLEAN_ATTRIBUTES = %w( has_embedded_notes + cdn_hosted ) has_bit_flags BOOLEAN_ATTRIBUTES diff --git a/lib/tasks/images.rake b/lib/tasks/images.rake index d2a41d570..7c745ffd9 100644 --- a/lib/tasks/images.rake +++ b/lib/tasks/images.rake @@ -1,6 +1,27 @@ require 'danbooru_image_resizer/danbooru_image_resizer' namespace :images do + desc "Enable CDN" + task :enable_cdn, [:min_id, :max_id] => :environment do |t, args| + CurrentUser.scoped(User.admins.first, "127.0.0.1") do + credentials = Aws::Credentials.new(Danbooru.config.aws_access_key_id, Danbooru.config.aws_secret_access_key) + Aws.config.update({ + region: "us-east-1", + credentials: credentials + }) + client = Aws::S3::Client.new + bucket = Danbooru.config.aws_s3_bucket_name + + Post.where("id >= ? and id <= ?", args[:min_id], args[:max_id]).find_each do |post| + post.cdn_hosted = true + post.save + key = File.basename(post.file_path) + client.copy_object(bucket: bucket, key: key, acl: "public-read", storage_class: "STANDARD", copy_source: "/#{bucket}/#{key}", metadata_directive: "COPY") + # client.put_object(bucket: bucket, key: key, body: body, content_md5: base64_md5, acl: "public-read", storage_class: "STANDARD") + end + end + end + desc "Redownload an image from Pixiv" task :download_pixiv => :environment do post_id = ENV["id"]