どういうわけか
Herokuちゃんはとても便利な子でやりたい放題です。
ちょっとしたものを作りたいなーと思ったら、テケトーに作ってpushしたら勝手に動いててくれます。しかもタダで。自分のVPSとかで動かすようにするとメンテ面倒だし何より有限なリソースをクソアプリに割きたくないので、Herokuちゃんにお願いします。Herokuにゴミを投げつけていくスタイル。
ただHerokuちゃん使うときにちょっと困るのはストレージが無いことです。仕方ないね。 なのでストレージはHerokuちゃん以外に用意してあげる必要があります。
自分のVPSにRiakCSなりそういう感じのものを立ててもいいんですけど、それだとHerokuの意味があんまり無くなってしまうので、ここはストレージも雲の上に載せたい気分。
ちょっとググってみると、AmazonのS3にアップロードするのが良さそうです。
というわけで、Microsoft Azureに投げてみます(
Azureのストレージをつくる
Azureの管理画面からテケトーに作っちゃってください!!!!1111 GUIでサーバが生えていくのなんか不思議ですね。
ストレージをつくったら、コンテナーを1つ追加します。今回はプライベートなやつ作りました。 パブリックBLOBってやつを選ぶと直接アクセスできるモードになるっぽいので、ブログとかの画像置き場にするならパブリックBLOBのほうがよさそうですね。
あと、アクセスキーの管理から謎文字列を回収しておきます。これがないとアップロード出来ない。
RubyでAzureのストレージにアクセス
マイクロソフト公式のgemがあるので便利です。
- Azure/azure-sdk-for-ruby https://github.com/Azure/azure-sdk-for-ruby
「Blobs」っていうところにサンプルコード載ってますね。パッと見た感じ、特に難しいこともなく投げたり奪ったりできそうです。
SinatraちゃんでAzureに保存
さっきのサンプルコードを元にこんな感じ。MVCなんてなかった。
post '/picture' do service = Azure::BlobService.new File.open(params[:file][:tempfile].path, 'rb') do |file| service.create_block_blob('さっき作ったコンテナの名前', 'ファイル名', file.read) end redirect '/' end
簡単ですね! AzureにアクセスするあたりをFileっぽくラップしたものを作れば便利そう。
というわけでゴミを生み出しました
- Tadalas - 画像ぺたぺたするやつ(※ただしログはラスト1枚に限る)
- 2014/05/09 Azureの無料期間切れて放置してるのでエラーします
- ソースコード: https://github.com/rutan/tadalas
はい、Herokuにゴミを投げつけていくスタイルです。
画像アップローダーになってます。ただしストレージが貯まると困るので最後の1枚しか残りません。
snapchat的な感じですね!(違う)
ちなみにRocketIOのWebSocket的なパワーで、誰かが画像アップロードするとリアルタイムに画像が切り替わります。WebSocketも1度くらい使ってみたかったので……
これでHerokuでもストレージ使えるし、今後のゴミ量産が捗りますね!!!!