Add in our Ruby script

This commit is contained in:
Mark McGranaghan 2016-01-02 17:33:10 -08:00
parent 1a871c98a1
commit 7ce10fd6f1

42
tools/upload-site Executable file
View File

@ -0,0 +1,42 @@
#!/usr/bin/env ruby
# Upload the contents in public/ to the S3 bucket from which we serve
# gobyexample.com. We use this instead of `aws iam sync` because that command
# doesn't correctly guess the text/html mime time of the extension-less files.
# We didn't write this in Go because we had already written it in Ruby for
# another website and didn't want to re-write it.
require "aws-sdk"
require "set"
s3 = Aws::S3::Client.new(
region: "us-east-1",
credentials: Aws::Credentials.new(ENV["AWS_ACCESS_KEY_ID"], ENV["AWS_SECRET_ACCESS_KEY"])
)
# (Re-)upload each file to S3. We're not worried about what's currently there.
Dir.glob("./public/**/**").each do |local_path|
next if File.directory?(local_path)
# Derive final path.
s3_path = local_path.sub("./public/", "")
# Infer content type, including for HTML files that need pretty URLs.
content_type =
case s3_path
when /\.ico$/ then "image/x-icon"
when /\.png$/ then "image/png"
when /\.css$/ then "text/css"
else "text/html"
end
puts("Uploading #{s3_path} (#{content_type})")
File.open(local_path, "rb") do |local_file|
s3.put_object(
bucket: "gobyexample.com",
key: s3_path,
content_type: content_type,
body: local_file)
end
end