空飛ぶとんジニア

平凡なエンジニアが日々関心を持ったことや学んだこと、感じたことを吐き出すブログ。緊張すると涙がでるのが特徴です。

Railsをproduction環境で運用する際に初級プログラマが確認しておくべき10個のこと

本番で動作中のRuby on Rails[RoR, Rails]を使ったサービスを引き継ぎました。
..................・ω・
Railsを使って「開発」する情報はネット上にたくさん転がっていますが、「開発」+「保守・運用」に切り替わる時点/その後の話はわりと軽視されがちだし頻度も少ないので「最低限これだけ」という部分をまとめておきます。
じゃないと引き継いだ担当者が困っちゃうし、自分がメンテするにしても困るよ!
サービスは「開発」よりも「開発・保守・運用」が重なる期間の方が長い ということを忘れないでください。
主に学生プログラマや学習サイトでRailsコースを卒業したプログラマ見習いに読んでほしいなーと思います。

使ってる前提のツールは
・github
・rails4以上
・nginx -> rails(unicorn)という構成
・heroku使ってない

コードはすでにサーバー上に乗っていて、git pull型の本番反映のスタイルを取っているという状況です。
(ただまだ本番稼働させてないなら、少し時間をとってcapistranoとかを使って本番反映してほしいと、僕は思うぞ!!)

本番反映時のトラブル対策

反映した/変更したスタイルシート/jsが読み込まれない

確認項目:
config/initializers/assets.rbにprecompile対象のファイルが追加されているかrailsガイド
プリコンパイルを実行したか
.gitignoreにpublic/assetsが追加されてるかpublic/assetsの意味

本番反映したら画像が消えちまう

確認項目:
.gitignoreにpublic/uploadsが追加されてるか
アップロード先のディレクトリは設定によって変わるのでcarrierwaveの例

セキュリティ

管理者アカウントのパスワードをちゃんとしよう

確認項目:
メールアドレス&パスワードが一般的なものになってないか
よく使われるパスワードランキング2016
せめてこの辺は外した方がいいと思います。
担当者の意識も確認しておいた方がいいかもですね〜
IPAも注意しているように、結構身近な問題です。

そのURL、管理者しかアクセスできないってほんと?

確認項目:
railsコンソール
rake routes/rails routes
でアクセスできるURLが確認できるので、怪しいURLがあれば実際にアクセスしてチェックしてみてください。

そうだ、俺が!俺たちがパスワードだ!!と言わんばかりのパスワード直書き

確認項目:
config/database.ymlのproductionにデータベースのパスワードを直書きしてないかどうか

運用・保守時のトラブルを避ける

コードはキレイに書こう!!(少なくともVIewのインデントはキッチリやろう)

確認項目:
erbを使うならインデントとかキッチリしておこう。あとで絶対後悔します。
できればリーダブルコードの第一部(表面上の改善)をパラパラでもいいので読もう

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 68人 クリック: 1,802回
  • この商品を含むブログ (138件) を見る

ミドルウェアのバージョン大丈夫!?

確認項目:
各種ミドルウェアのバージョンチェック
mysql, postgresql, redis, memcached... 本番反映した時点ですでにサポート終了されてるなんて悲しいですよ。

ログが出力されるところの把握

確認項目:
nginx, rails, mysql使ってるツールのログ出力を確認しよう

使ってないgemは捨てよう

確認項目:
Gemfileをチェックして、開発途中で検証のために追加したものは破棄しよう。
関係ないコードはその時は良くてもボディブローのように効いてきますよ!

ロジックに関係ないカラム/フィールドは削除しよう

確認項目:
db/schema.rbをチェックしてみて、このフィールドって何につかってるんだっけ??って見直してみて下さい。
db:migrate:resetやdb削除をバンバン使えるのは本番反映する前の今しかできませんよ

まとめ

確認項目を10個まとめてみました。
ある程度の開発が済み、リリースを急ぐ気持ちはわかるのですが、一旦落ち着いて上記の項目は確認しておいた方がいいんじゃないかなーと思いました。

ではではm( )m