[CircleCI] Ruby のバージョン指定について
- 2015 1/27
Node.js (Express) で forever restart 後に bind EADDRINUSE エラーが頻発する障害が発生しました。
Error: bind EADDRINUSE はそのポートが既に使われてる場合に発生するエラーでして、同じ障害に悩まされた人のために解決方法をメモしておきます。
エラーメッセージ
Error: bind EADDRINUSE at errnoException (net.js:904:11) at net.js:1084:30 at Object.12:1 (cluster.js:592:5) at handleResponse (cluster.js:171:41) at respond (cluster.js:192:5) at handleMessage (cluster.js:202:5) at process.EventEmitter.emit (events.js:117:20) at handleMessage (child_process.js:318:10) at child_process.js:392:7 at process.handleConversion.net.Native.got (child_process.js:91:7) at process.<anonymous> (child_process.js:391:13) at process.EventEmitter.emit (events.js:117:20) at handleMessage (child_process.js:318:10) at Pipe.channel.onread (child_process.js:343:11) |
まず netstat コマンドで node.js サーバーのプロセスで使うポートが他のプロセスに使われていないか確認します。
$ netstat -nltp | grep 3000 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 6653/phantomjs |
今回は phantom.js が 3000 番ポートで起動していたようでした。phantom.js は利用しているものの他のポート番号を指定して起動させるようにしていたので 3000 番ポートを使っていた理由は不明です。プロセスを停止させて問題ない場合、 ps aux | grep phantomjs で phantom.js の PID (プロセス番号) を特定して kill コマンドでプロセスを終了させます。
最後に forever や pm2 もしくは node コマンドなどで node サーバーを起動させて、エラーログに Error: bind EADDRINUSE が出力されていないことを確認すれば完了です。
・Node.jsの開発で `warn – error raised: Error: listen EADDRINUSE` って怒られるときの対応 – Qiita
・node.js – Nodejs application Error: bind EADDRINUSE when use pm2 deploy – Stack Overflow
Node.js で jsdom を利用して数万件のウェブページをスクレイピングしたところ out of memory エラーが発生しました。
FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory |
jsdom.env メソッドに渡す callback メソッドの中で使用した window オブジェクトに関連するメモリを解放するために window.close() メソッドを呼ぶ必要があるそうです。
jsdom.env(html, function (errors, window) { // free memory associated with the window window.close(); }); |
ドキュメントに書いてある通りに使わないとダメだなぁと痛感しました・・・。
・jsdom and node.js leaking memory – Stack Overflow
・javascript – Memory leak in Node.js scraper – Stack Overflow
最近、技術的負債の返却のやり方について考えていたのですが、そのアプローチの1つとして参考になる記事を教えてもらいました。
■ 技術的負債を返却するには何をすればいいか
A. “技術的負債の返却が上手な人を雇って権限を与える”ほんとこれ。2年以上ずーっとやって来てわかった。
サービス開発しながら空いた時間で返却とか、時間の流れで積み重なる負債の量にはまるで歯がたたない。積み重なる負債を圧倒的に倒せる能力を持った人を雇うか、組織の何処かから連れてきて権限を与えるしかないと思う。
・引用元:楽天 TechTalk で Ruby と Rails の話をしてきた, 技術的負債を返却するには何をすればいいか – HsbtDiary(2014-12-12)
サービスと事業が成長してきて、サービス開発する人以外も雇える余裕ができてきたら「技術的負債の返却が上手な人」を雇って権限を与えて任せるというのが良さそうですね。問題点としては、そういう人材は市場にほとんどいないのでリクルーティング自体が難しそうということぐらいでしょうか。
Mac の QuickTime Player を使って画面を録画する手順をまとめました。
Sony の USB マイクを Mac に接続します。
・Amazon.co.jp: SONY エレクトレットコンデンサーマイクロホン PCV80U ECM-PCV80U: 楽器
以上です。
休日にサーバーアラートが飛んできても安心して対応できるように、SSHクライアントアプリ JuiceSSH をインストールしました。
・JuiceSSH – SSH Client – Google Play の Android アプリ
Nexus5 にインストールしたのですが、SD カードを差すことができないので SSH 秘密鍵はメール経由でコピペしました。
他は UI が分かりやすいので接続先など特に困ることなく設定できました。
Google 2段階認証を管理する Google Authenticator アプリを複数端末で設定する方法をメモ。
Google 公式のマニュアルに書いてあります。
・Google 認証システムのインストール – Google アカウント ヘルプ
公式サイトよりも分かりやすいのが下記のサイトです。
・iPhone 機種変更時の2段階認証の移行 | Steppin' out
最後に Gmail 以外に、二段階認証を設定しているサービスのURLを貼っておきます。
Dropbox
Evernote
GitHub
Homebrew で brew doctor したら xz というライブラリがインストールされてないというエラーが出ました。
$ brew doctor Please note that these warnings are just used to help the Homebrew maintainers with debugging if you file an issue. If everything you use Homebrew for is working fine: please don't worry and just ignore them. Thanks! Warning: Some installed formula are missing dependencies. You should `brew install` the missing dependencies: brew install xz Run `brew missing` for more details. |
brew missing すると詳細が分かるということだったので、やってみたら ImageMagick の依存ライブラリとのことでした。
$ brew missing imagemagick: xz |
xz を brew install します。
$ brew install xz ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/xz-5.0.7.yosemite.bottle.tar.gz ######################################################################## 100.0% ==> Pouring xz-5.0.7.yosemite.bottle.tar.gz /usr/local/Cellar/xz/5.0.7: 58 files, 1.5M |
もう一度、brew doctor でチェックします。
$ brew doctor Your system is ready to brew. |
正常に戻りました。