From a8bb122c6ad5685ab8dd4fde2e9808e932fd6c98 Mon Sep 17 00:00:00 2001 From: Kegan Myers Date: Sat, 15 Apr 2017 23:38:55 -0500 Subject: [PATCH] Allow uploading of files to google cloud storage. (dirty, but working) --- Gemfile | 1 + Gemfile.lock | 160 +++++++++++++++++++++++++++++++ config/initializers/ostatus.rb | 2 +- config/initializers/paperclip.rb | 20 ++++ 4 files changed, 182 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 7b359af1..06405b6c 100644 --- a/Gemfile +++ b/Gemfile @@ -15,6 +15,7 @@ gem 'pghero', '~> 1.7' gem 'dotenv-rails', '~> 2.2' gem 'aws-sdk', '~> 2.9' +gem 'fog' gem 'fog-openstack', '~> 0.1' gem 'paperclip', '~> 5.1' gem 'paperclip-av-transcoder', '~> 0.6' diff --git a/Gemfile.lock b/Gemfile.lock index 14ed0d30..e2d595c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,7 @@ GEM remote: https://rubygems.org/ specs: + CFPropertyList (2.3.5) actioncable (5.1.4) actionpack (= 5.1.4) nio4r (~> 2.0) @@ -160,17 +161,159 @@ GEM i18n (~> 0.5) fast_blank (1.0.0) ffi (1.9.18) + fission (0.5.0) + CFPropertyList (~> 2.2) + fog (1.42.0) + fog-aliyun (>= 0.1.0) + fog-atmos + fog-aws (>= 0.6.0) + fog-brightbox (~> 0.4) + fog-cloudatcost (~> 0.1.0) + fog-core (~> 1.45) + fog-digitalocean (>= 0.3.0) + fog-dnsimple (~> 1.0) + fog-dynect (~> 0.0.2) + fog-ecloud (~> 0.1) + fog-google (<= 0.1.0) + fog-internet-archive + fog-joyent + fog-json + fog-local + fog-openstack + fog-ovirt + fog-powerdns (>= 0.1.1) + fog-profitbricks + fog-rackspace + fog-radosgw (>= 0.0.2) + fog-riakcs + fog-sakuracloud (>= 0.0.4) + fog-serverlove + fog-softlayer + fog-storm_on_demand + fog-terremark + fog-vmfusion + fog-voxel + fog-vsphere (>= 0.4.0) + fog-xenserver + fog-xml (~> 0.1.1) + ipaddress (~> 0.5) + json (~> 2.0) + fog-aliyun (0.2.0) + fog-core (~> 1.27) + fog-json (~> 1.0) + ipaddress (~> 0.8) + xml-simple (~> 1.1) + fog-atmos (0.1.0) + fog-core + fog-xml + fog-aws (1.4.1) + fog-core (~> 1.38) + fog-json (~> 1.0) + fog-xml (~> 0.1) + ipaddress (~> 0.8) + fog-brightbox (0.14.0) + fog-core (~> 1.22) + fog-json + inflecto (~> 0.0.2) + fog-cloudatcost (0.1.2) + fog-core (~> 1.36) + fog-json (~> 1.0) + fog-xml (~> 0.1) + ipaddress (~> 0.8) fog-core (1.45.0) builder excon (~> 0.58) formatador (~> 0.2) + fog-digitalocean (0.3.0) + fog-core (~> 1.42) + fog-json (>= 1.0) + fog-xml (>= 0.1) + ipaddress (>= 0.5) + fog-dnsimple (1.0.0) + fog-core (~> 1.38) + fog-json (~> 1.0) + fog-dynect (0.0.3) + fog-core + fog-json + fog-xml + fog-ecloud (0.3.0) + fog-core + fog-xml + fog-google (0.1.0) + fog-core + fog-json + fog-xml + fog-internet-archive (0.0.1) + fog-core + fog-json + fog-xml + fog-joyent (0.0.1) + fog-core (~> 1.42) + fog-json (>= 1.0) fog-json (1.0.2) fog-core (~> 1.0) multi_json (~> 1.10) + fog-local (0.4.0) + fog-core (~> 1.27) fog-openstack (0.1.21) fog-core (>= 1.40) fog-json (>= 1.0) ipaddress (>= 0.8) + fog-ovirt (0.1.1) + fog-core (~> 1.45) + fog-json + fog-xml (~> 0.1.1) + rbovirt (~> 0.1.4) + fog-powerdns (0.1.1) + fog-core (~> 1.27) + fog-json (~> 1.0) + fog-xml (~> 0.1) + fog-profitbricks (4.0.0) + fog-core (~> 1.42) + fog-json (~> 1.0) + fog-rackspace (0.1.5) + fog-core (>= 1.35) + fog-json (>= 1.0) + fog-xml (>= 0.1) + ipaddress (>= 0.8) + fog-radosgw (0.0.5) + fog-core (>= 1.21.0) + fog-json + fog-xml (>= 0.0.1) + fog-riakcs (0.1.0) + fog-core + fog-json + fog-xml + fog-sakuracloud (1.7.5) + fog-core + fog-json + fog-serverlove (0.1.2) + fog-core + fog-json + fog-softlayer (1.1.4) + fog-core + fog-json + fog-storm_on_demand (0.1.1) + fog-core + fog-json + fog-terremark (0.1.0) + fog-core + fog-xml + fog-vmfusion (0.1.0) + fission + fog-core + fog-voxel (0.1.0) + fog-core + fog-xml + fog-vsphere (1.13.1) + fog-core + rbvmomi (~> 1.9) + fog-xenserver (0.3.0) + fog-core + fog-xml + fog-xml (0.1.3) + fog-core + nokogiri (>= 1.5.11, < 2.0.0) formatador (0.2.5) fuubar (2.2.0) rspec-core (~> 3.0) @@ -223,6 +366,7 @@ GEM rainbow (~> 2.2) terminal-table (>= 1.5.1) idn-ruby (0.1.0) + inflecto (0.0.2) ipaddress (0.8.3) iso-639 (0.2.8) jmespath (1.3.1) @@ -284,6 +428,7 @@ GEM net-scp (1.2.1) net-ssh (>= 2.6.5) net-ssh (4.2.0) + netrc (0.11.0) nio4r (2.1.0) nokogiri (1.8.0) mini_portile2 (~> 2.2.0) @@ -380,6 +525,14 @@ GEM rainbow (2.2.2) rake rake (12.1.0) + rbovirt (0.1.4) + nokogiri + rest-client (> 1.7.0) + rbvmomi (1.11.3) + builder (~> 3.0) + json (>= 1.8) + nokogiri (~> 1.5) + trollop (~> 2.1) rdf (2.2.9) hamster (~> 3.0) link_header (~> 0.0, >= 0.0.8) @@ -408,6 +561,10 @@ GEM responders (2.4.0) actionpack (>= 4.2.0, < 5.3) railties (>= 4.2.0, < 5.3) + rest-client (2.0.2) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) rotp (2.1.2) rqrcode (0.10.1) chunky_png (~> 1.0) @@ -498,6 +655,7 @@ GEM thread (0.2.2) thread_safe (0.3.6) tilt (2.0.8) + trollop (2.1.2) twitter-text (1.14.7) unf (~> 0.1.0) tzinfo (1.2.3) @@ -527,6 +685,7 @@ GEM websocket-driver (0.6.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.2) + xml-simple (1.1.5) xpath (2.1.0) nokogiri (~> 1.3) @@ -561,6 +720,7 @@ DEPENDENCIES fabrication (~> 2.16) faker (~> 1.7) fast_blank (~> 1.0) + fog fog-openstack (~> 0.1) fuubar (~> 2.2) goldfinger (~> 2.0) diff --git a/config/initializers/ostatus.rb b/config/initializers/ostatus.rb index ba96fda2..4a064252 100644 --- a/config/initializers/ostatus.rb +++ b/config/initializers/ostatus.rb @@ -11,7 +11,7 @@ Rails.application.configure do config.x.local_domain = host config.x.web_domain = web_host config.x.use_https = https - config.x.use_s3 = ENV['S3_ENABLED'] == 'true' + config.x.use_s3 = ENV['S3_ENABLED'] == 'true' || ENV['GCS_ENABLED'] == 'true' config.x.use_swift = ENV['SWIFT_ENABLED'] == 'true' config.x.alternate_domains = alternate_domains.split(/\s*,\s*/) diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index 2c82a91d..a61f04d2 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -64,3 +64,23 @@ else Paperclip::Attachment.default_options[:path] = (ENV['PAPERCLIP_ROOT_PATH'] || ':rails_root/public/system') + '/:class/:attachment/:id_partition/:style/:filename' Paperclip::Attachment.default_options[:url] = (ENV['PAPERCLIP_ROOT_URL'] || '/system') + '/:class/:attachment/:id_partition/:style/:filename' end + +if ENV['GCS_ENABLED'] == 'true' + Paperclip::Attachment.default_options.update({ + :path => "images/:class/:id/:attachment/:style/img_:fingerprint", + :storage => :fog, + :fog_credentials => { + :provider => 'Google', + :google_storage_access_key_id => ENV.fetch('GCS_ACCESS_KEY_ID'), + :google_storage_secret_access_key => ENV.fetch('GCS_SECRET_ACCESS_KEY'), + :path_style => !ENV['GCS_ALIAS_HOST'].blank? + }, + :fog_directory => ENV.fetch('GCS_BUCKET'), + :fog_public => true, + :fog_host => 'https://' + ENV.fetch('GCS_BUCKET'), + }) + + unless ENV['GCS_ALIAS_HOST'].blank? + Paperclip::Attachment.default_options[:url] = ENV['GCS_ALIAS_HOST'] + end +end