ぽこひでブログ

ほのぼの大学4年をやってる [ぽこひで] の学生エンジニアブログ?

Ruby on Rails 4 をHeroku の無料枠で運用するときに使っているaddon一覧(1)

http://2.bp.blogspot.com/-cwkPKUd6qbM/UraV4Wt6FUI/AAAAAAAAENk/WCg2aPFH4Gg/s1600/Heroku-1.png

こんばんは~  スタバでカタカタ系男子のぽこひで です(゚∀゚)

普段は趣味でRuby on Rails4を使ってWEBサービスを作っていて、それをHeroku上で運用しているのですが、改めてHerokuの勉強しなきゃなーと思ってここに勉強した結果をまとめておきます。自分なりのまとめなので、もしかしたらデータ不十分かも。参考程度に見てもらえると嬉しいです。

現在使っているAddon一覧

  • Heroku Postgres :: Database
  • Memcached Cloud
  • New Relic APM :: Newrelic
  • mLab MongoDB
  • Redis Cloud
  • Heroku Scheduler

Herokuの復習

"rails heroku"とかググったらいくらでも出てくるけど、中々herokuの性質をまとめて教えてくれるサイトがないなか個人的にこのサイトはわかりやすかったので是非

blog.mah-lab.com

ただし、上記の記事は2013年くらいので、最近Herokuの仕様が変わって、無料枠が変わったのでそれは注意です。

tattii.hatenablog.com

30分で寝てしまうようになったのと、1日のうち最大18時間しか起動しないので6時間は確実に寝る時間が生じちゃうらしい(´・ω・`)かなしい。ただ、webとworkerの二つが使えるので、重たい処理はsidekiqとかで非同期処理させたりできて嬉しいです。

Heroku Postgresql :: Database

Ruby on RailsMysqlを使うならClearDBっていうアドオンをつかって、Postgresならこのアドオン。Heroku自体が標準のDBとしてPostgresをサポートしていて、いろいろと万能そうなので安直に今はこのアドオンを使ってメインのデータベースにはPostgresを利用しています。ただDBに関してはActiveRecordを使っているかぎりMysqlでもPostgresでも特に扱い方に違いはないので、完全にどっちを使うかは自分次第です。てなわけで、いろいろなサイトに載っている事ですが、二つのアドオンについての違いについておさらい。

ClearDB(mysql用) Postgresql :: Database(pg用)
容量 合計5MBまで レコード数10000行まで

ClearDB

ClearDBアドオンはHerokuとは独立したデータサービスが提供しているMySQLを使えるもの。基本的にHerokuにupしたものはFTPのように挙げられたファイルなどをk簡単に確認することはできないが、ClearDBを使ってHeroku経由で作成したデータベースにHerokuアプリケーションの外からアクセスすることができる。

アプリケーションの外からデータベースに直接アクセスできるので、MySQL Workbenchなどの各種コマンドを用いてバックアップの作成やバックアップのリストアが可能。

この記事を参考にしました。 Heroku データベースの管理(ClearDB アドオンによる MySQL の利用) - 君の瞳はまるでルビー - Ruby 関連まとめサイト

Postgresql :: Database

このアドオンもHerokuとは独立したデータベースサービスが提供してるので、Herokuとは無関係に単独でも利用することができて、Heroku外からアクセスすることが可能。

この記事を参考。データベースのバックアップやリストア、本番環境のデータをローカルに移行する方法とかが解説されている。実際に試してはないので動くかは確認していない。 Heroku データベースの管理 - 君の瞳はまるでルビー - Ruby 関連まとめサイト

Memcached Cloud

HerokuでMemcachedを使うアドオンで他にMemcachierというのがあるらしいけど、今回は無料枠で30MBまで使えるこのアドオンを使用。ただし、アドオン登録時にクレジットカードの登録が必要です。AWSも初期登録の時点でクレジット登録しなきゃいけなかったり、面倒くさい。一ヶ月前までクレジットカードを持っていなかったから昔はなんとも制限の聞いた中で開発をしていました(´・ω・`)b

フラグメントキャッシュやアクションキャッシュの保存先をHerokuがお勧めするdalliを使って、このアドオンを使って保存しています。導入の方法とかはheroku dev center本家を参考にすればいいかと。結構簡単です。

devcenter.heroku.com

New Relic APM :: Newrelic

サービスを作ってそのレスポンス速度とかいろいろな状態を監視してくれるNewrelicとHerokuのアプリを連携?してくれる感じのアドオン!

herokuで動くRailsアプリケーションにNew Relicを入れる - JanGaJan.com

こんな感じの記事を参考にNewrelicを入れると、Newrelicのサイト上で自分のアプリの時間ごとのアプリの状態を監視してくれます。無料枠だと、1日分しかログを残してくれないけど、たまに見たり、何にロードで時間がかかっているかとかチューニングするときにかなり役に立つはず!なので、入れるとたまに渋ります。まだ、そこまで恩恵は受けた気はしないですが。 あと、Newrrelicが定期的に自分のサイトを巡回してくれるらしいので、アプリが寝ないとかなんとか。なぜか自分のは寝ちゃうんですけどね(-_-) …zzzまたいつか見直そう。

今回のまとめ

Herokuを使ってなんとか無料枠で収めようとしているのですが、Postgresを使っているとレコード数の上限が10000で、すぐになくなってしまうので、色々とデータのありかたを考えさせられます。たとえば、ユーザの視聴ログなんかはREDISのリスト型を使って管理すると最悪消えても大丈夫だし、これも無料枠である程度使えるからいいよねーとか、これはこの前自分が変更した例ですが、今のサービスでユーザの趣向データを取っています。

たとえばpreferenceモデルに

#preferenceモデル

music: integer
sport: integer
learn: integer
play: integer

みたいにpreferenceモデルに音楽とスポーツと学習と遊びとかそういったデータを保存するときにこうやって4つのままやってもいいけど、配列とかにしたらもっと簡単に格納できるよなーとか。postgresでは配列型というのが推奨はされてないけど、定義できるみたい。でも、配列型はクックパッドさんとかが、遅いし使うなーとか言ってたきがするのでこれは使わない。こういったシンプルなデータの集まりだったら、何かbodyカラムかなんか適当に作ってやって、それを文字列型にして、"12,34,56,78"みたいな感じにcsv形式で入れてやれば、このcsvはparse_csvという関数を使えばすぐに配列型にできるし、一気に簡潔にかけるようになるので、色々工夫のしがいがあって楽しいです。

ちょっと長くなってきたので、今日はここまでで。後半はまた後日にまとめます。