Vagrantの中でUnicornを動かそうとしたときにハマったこと


Vagrantの開発環境の中では、たぶんNginx+Unicornとかを動かすことはそんなに無いと思うのですが、とりあえず勉強のために、素人はそんな環境でも動かしてみたくなります。

その際にハマりましたので、listenの書き方についてのメモです。

まず、Unicornだけで動かす場合は以下でよいと思います。

config/unicorn.rb
# Unicornだけを使うなら8080でもよいかもしれない。これで十分動きます。
listen 8080

続いて、Nginxをつかいたかったのでソケットを指定します。

config/unicorn.rb

# これはNGです。
# listen File.expand_path('../../tmp/sockets/unicorn.sock', __FILE__)
# 上はつまり下と同じです。
# listen '/vagrant/{project}/tmp/sockets/unicorn.sock'

# これはOKでした。いや、これもちょっと不都合かも...
# listen '/tmp/sockets/unicorn.sock'

# これにしておこう。
listen '/tmp/unicorn.sock'

メモ
- vagrantのSharedFolderの中にソケットは指定しちゃダメとのことです。
- (http://stackoverflow.com/questions/16388342/unicorn-fails-to-start-on-vagrant-box-due-to-errnoeperm) これの正確な根拠まで追えてないので、悲しいです。
- すでにunicorn.sockとか存在してるとエラーになるので、そのような場合は削除しておいてからrails_unicornする。
- ソケット指定のパスは絶対パスで書いておく必要ありらしい。。
- /tmp/socketsというディレクトリは作ったのですが、vagrant reloadするとなんかそのディレクトリは消えちゃいましたので、tmp真下にソケットを用意しておきました..

根拠弱いことばかりですみませんが、自分用メモですので。
なんで、vagrantのShared Folderの中だとだめなんでしょうか?Unicornのソースを読まないとなぁ。。