Permalink
Browse files

Add in our Ruby script

  • Loading branch information...
1 parent 1a871c9 commit 7ce10fd6f1c2caaf1bf2c4db6ea9f629a6e7f410 @mmcgrana committed Jan 3, 2016
Showing with 42 additions and 0 deletions.
  1. +42 −0 tools/upload-site
View
42 tools/upload-site
@@ -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

0 comments on commit 7ce10fd

Please sign in to comment.