LoginSignup
1

More than 5 years have passed since last update.

YAMLに設定を持たせて、rubyでS3へファイルUP

Posted at

S3にtest.htmlをUPして
http://バケット名.s3.amazonaws.com/test.html
をブラウザで開きたい

必要なgemパッケージをインストール&修正

sudo gem i aws-s3
vim /usr/local/lib/ruby/gems/2.0.0/gems/sauberia-aws-s3-0.6.2.1254423624/lib/aws/s3/extensions.rb

84行目を以下に修正

gsub!( Regexp.new("[\x80-\xFF]", Regexp::EXTENDED, 'n')) { "%02X" % $&[0] }

続いて設定

sync_s3.yml
main:
 access_key_id     : アクセスキー
 secret_access_key : シークレットキー
 bucket_name       : backet名
 current_dir       : /var/www/imgs/
sync_s3.rb
#!/usr/local/bin/ruby
# -*- encoding: utf-8 -*-

# ディレクトリ以下取得
require 'find'
require 'yaml'
require 'pp'

# s3
# http://amazon.rubyforge.org/doc/
require 'aws/s3'
include AWS::S3

# 初期設定
YAML_PATH = "./sync_s3.yml";
data = YAML.load_file(YAML_PATH);   # パースする

ACCESS_KEY_ID     = data['main']['access_key_id'];
SECRET_ACCESS_KEY = data['main']['secret_access_key'];
BUCKET_NAME       = data['main']['bucket_name'];
CURRENT_DIR       = data['main']['current_dir'];

# S3設定
Base.establish_connection!(
  :access_key_id     => ACCESS_KEY_ID,
  :secret_access_key => SECRET_ACCESS_KEY,
  :server            => BUCKET_NAME + ".s3.amazonaws.com" # バケット名.s3.amazonaws.com
);

# S3への転送処理
S3Object.store(
          'test.html',              # アップロード先のファイル名
          open(./test.html),         # アップロードしたいローカルファイル
          BUCKET_NAME,         # バケット名
          :access => :public_read   # 全体に読み込み公開(他にも認証必須とかあります)
        );

実行

sudo ./sync_s3.rb

もし
http://バケット名.s3.amazonaws.com/test.htmlではなく
http://バケット名.s3.amazonaws.com/test/test.html
にしたい場合は

S3Object.store(
          'test/test.html',              # アップロード先のファイル名
          open(./test.html),         # アップロードしたいローカルファイル
          BUCKET_NAME,         # バケット名
          :access => :public_read   # 全体に読み込み公開(他にも認証必須とかあります)
        );

とするだけ!!

これで、シンプルにUPするまで出来るようになります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1