Railsアプリケーション開発をしてるとき、Railsプロセスが止まることってありますよね。
そのとき、呪文のようにkill -9 プロセスID
を実行している人っていませんか。
はい。僕です。理解しないでやるのはよくないのはわかってるけどやっちゃうよね。
背景
そもそもUNIX周りを勉強しようと思った背景としては、
RubyやRailsのコードはそれなりに書けるようになったけど、Railsエンジニアとしてキャリアを積むためには
まだまだ知らないといけないことってたくさんあるなって思ったからです。
例えば、Railsってなんでrails s
したらサーバが起動するの?とかUnicorn使ってるけどどうやって動いてるのよ。と業務で何か問題が起きない限りそこのコードをわざわざ辿ることが日常業務でなかったからです。
とはいえ、Railsアプリケーションを1人で運用することってざらにある話なので勉強したいなと。
忙しい人向けのやったこと目次
- ゆううきブログの「2015年Webサーバアーキテクチャ序論」を読む
- 「なるほどUnixプロセス ― Rubyで学ぶUnixの基礎」を読んでみた
- 別件 Rackを実装してみた
- Rackを動かす
- routingっぽいものの実装
- アクセスログっぽいものの実装
それではやってみた
ゆううきブログの「2015年Webサーバアーキテクチャ序論」を読む
読めない。わからない。
土地勘がなさすぎて読めない
という訳で挫折した結果。Rubyで学べるUnixプロセスからはじめようと。
「なるほどUnixプロセス ― Rubyで学ぶUnixの基礎」を読んでみた
内容がすごいわかりやすい。
分からなかった点を社内の人に聞いてみた
Q. なんでforkした際の子プロセスは、一番最初の行が読み込まれないんですか?
A. fork は fork したところから動くので3行目からしか動かないですね
イメージとしてはプログラムカウンタ(実際にいまどこを実行しているのか)というものまで全部子プロセスにコピーされる感じ
-> わかりやすい。実際にいまどこを実行しているのかまでコピーされるのか。
Q. rackがどのリクエストの階層でどんなことがわかるか全然分からないです。(web application firewall とか)
A. とりあえず hello world するやつと、pathが /secret
だったら hello world する層までいかせないようなミドルウェアとか
別件 Rackで遊んでみた
具体的には 下記で遊んでみた
- [x] Rackを動かす
- [x] routingっぽいものの実装
- [x] アクセスログっぽいものの実装
やってみて
普段使ってるRubyで学べたのがよかったのと、普段Railsアプリケーション運用する上で使ってるライブラリの挙動を知ることは大事だなと再認識しました。
Keepとして、今後も継続して勉強する予定で、
次のTryはrack_middleware周りを葬ってみようと思ってる。