Ruby on Rails開発のインターン (Day 9)

こんにちは、皆さん!

2回目の月曜日がやってきた。いい週末だった。ゆっくり休みをとって後はリラックスしてって感じ。
今週から勤務時間がもとの6時間に戻るから、楽になる。
今日はTwilioで利用したアプリケーションのテストと例の困ったメモリリークの続き。


  • トピック:
  1. Herokuのデータベースを確認する方法
  2. Memory Bloat vs Memory Leak


  • 疑問:


  • 問題:
  1. データベースがめちゃくちゃに (解決)


  • 学習した内容:
  1. heroku logs -tでライブのHerokuログが見れる
  2. Memory bloatたるものが存在する


  • 今後やりたいこと:
  1. Twilioについてもっと勉強する


  • リソース:
  1. Debugging memory bloat


Herokuのデータベースを確認する方法

最近、ローカルのRailsにおけるターミナルでたたくコマンドは前にheroku runをつければ、ほとんどHeroku上でも使える。こうやって、一つのコマンドの意味と本当に正しい使い方を知ると一層プログラミングが楽しくなるものだ。


で、これがどうやって利用できるかというと、データベースがめちゃくちゃになっちゃった僕のデータベースにはいったい何があるのか気になったのでローカルでよくやるRailsのコンソールを以下のようにHerokuで実行した。

heroku run rails c

その後、User.allでデータベースのUserの部分にアクセス。それで、空集合が返ってきたのでデータベースに,Userが何もないことを知った。


結局、以下のように以前に取っておいたバックアップでデータベースを復帰させた。(もちろんいくつかのデータは失った)

$ heroku pg:backups restore [id of backups]

僕は同じHerokuアプリで複数の異なるコードをテストしていたので、これからこれにって感じで移動したときにデータベースの内容が混ぜったのが原因。みなさんは絶対に混ぜないでね(笑)


新しいマイグレーションを追加したときなどはちゃんと以下のコマンドでテーブルを更新しよう。

$ heroku run rake db:migrate


Memory Bloat vs Memory Leak

Memory bloatはおそらくmemory leakほどしられていないでしょう。 簡単に言うと、メモリ関係の問題の一つなのだが、memory leakよりは安全といえるでしょう。
個人的にこのサイト(Debugging memory bloat)の以下の写真が一番2つの違いを理解しやすくしてくれるだろう。
f:id:Coding_Studio:20180717082511p:plain
見ての通り、memory bloatでは短い期間にメモリの使用量が急増している。しかし、そのメモリの使用量も最終的にはある一定の範囲内に落ち着く。これはメモリの使用量がどんどん上昇するだけではないことを示している。
一方で、memory leakは少しだが、ずっとメモリの使用量が上昇し続けている。よって、最終的にはメモリを使い切ってしまうのだ。


よって、memory bloat はmemory leakよりも安全であり、必ずしもプログラムをクラッシュさせるとは限らない。しかし、memory leakはそのまま放っておくとあっという間にプログラムをクラッシュさせる要因となりうる!!

まとめ

今日はまず、Twilioに関していくつかテストをした。その内容はサイトとスマホの間でのテキストのやり取りであり、このプログラムにプロフェッショナルな機能が備わっているように感じた。時間があれば、自分でも少し研究して応用できたらいいなと思った。
それと、memory leakだと思っていたものが単なるmemory bloatである可能性が高くなってきた。少し安心した。今のプログラムでそれのせいでクラッシュしない可能性があるからね。


ご精読ありがとうございました。では、また次回まで✌



Day 10はこちら↓↓
programming-shop.hatenablog.com


Day 8はこちら↓↓
programming-shop.hatenablog.com