
The script sets up the -region and -bucket flags to point to the right S3 location. AWS_* env vars should still be set manually. The old Ruby uploading code is moved to upload-ruby-old for now (will be deleted later)
43 lines
1.2 KiB
Ruby
Executable File
43 lines
1.2 KiB
Ruby
Executable File
#!/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
|