Skip to content

Instantly share code, notes, and snippets.

@TheNaoX
Last active August 29, 2015 14:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TheNaoX/e87593e115413577be79 to your computer and use it in GitHub Desktop.
Save TheNaoX/e87593e115413577be79 to your computer and use it in GitHub Desktop.
Generate unfingerprinted version of assets and uploading them to s3
class GenerateSDKFiles
FILE_NAMES = [ "application.js" ]
ONE_HOUR = 3600
def generate
Rails.logger.info "Started to sync libraries #{FILE_NAMES}"
FILE_NAMES.each do |file_name|
Rails.logger.info "Syncing #{file_name}"
asset_name = prefix(assets[file_name])
gzip_asset_name = prefix(assets[file_name]) + ".gz"
if File.exists? asset_name
create_file file_name, File.open(asset_name)
end
if File.exists? gzip_asset_name
create_gzip_file file_name + ".gz", File.open(gzip_asset_name)
end
Rails.logger.info "Synced #{file_name}"
end
end
private
def prefix(asset)
"public/assets/#{asset}"
end
def manifest
@manifest ||= Sprockets::Manifest.new(ActionView::Base.assets_manifest.environment, ActionView::Base.assets_manifest.dir)
end
def assets
@assets ||= manifest.assets
end
def connection
@connection ||= Fog::Storage.new(
provider: 'AWS',
aws_access_key_id: APP_CONFIG['aws_key'],
aws_secret_access_key: APP_CONFIG['aws_secret'],
region: APP_CONFIG['fog_region']
)
end
def directory
@directory ||= connection.directories.get(APP_CONFIG['fog_directory'])
end
def create_file(file_name, file)
directory.files.create(
key: "assets/" + file_name,
body: file,
cache_control: "public, max-age=#{ONE_HOUR}",
public: true
)
end
def create_gzip_file(file_name, file)
begin
directory.files.create(
key: "assets/" + file_name,
body: file,
cache_control: "public, max-age=#{ONE_HOUR}",
content_encoding:'gzip',
public: true
)
rescue Exception => e
Rails.logger.info "Cannot sync gzip version, reason #{e.to_s}, #{file_name}, #{file.inspect}"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment