Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| #!/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 |