何もしないファイルアップローダgem Toriに(僕だけが)待望の新機能、S3ストレージ対応を導入させた。
README.mdから引用すると、Railsとかで
gem 'aws-sdk' gem 'tori', require: ['tori/rails', 'tori/backend/s3']
# Save to S3 bucket. Tori.config.backend = Tori::Backend::S3.new(bucket: 'tori_bucket') # Filename decided by model.class.name,id and hidden words. Tori.config.filename_callback do |model| "#{model.class.name}/#{Digest::SHA1.hexdigest "#{ENV["TORI_MAGICKWORD"]}/#{model.id}"}" end
class Photo < ActiveRecord::Base tori :image end
上のようによしなに書いておくと、後は勝手にtori_bucket
というS3 bucketにモデルクラス毎のディレクトリができて、レコード毎に画像を保存できる。
こうしてS3に上げた画像を件のサムネイル生成サーバーでさばいていて、僕は便利に使ってる。
FileSystemとS3をつかさどるクラスの切り替える境界線のイメージがイマイチわかなかったけど、method_missingでいい感じにproxyする方法を思いついたので導入してみた。
因みに参考にしていたファイルアップローダであるRefileを見てみると、順調に画像変換サーバーとして進化していた。
Toriの場合、例えば画像取得にシグネチャーを入れてDoS対策しましょうとなると、サムネイル変換サーバーを直せば良い。
Toriはどこまでもシンプルです。