Railsアプリを公開する際に、設定でハマった箇所があったので、備忘録を残しておきます。
環境
アプリケーションを公開するにあたり、下記を使用しました。
- さくらインターネット VPS
- CentOS7を使用
- Rails:(5.0.1)
- Nginx:(1.10.3)
- Unicorn:(4.8.3)
- PostgreSQL:(9.2.18)
設定で参考にしたサイト
-
nginx + unicorn + Railsの設定方法
※決して参考元の設定が間違っているわけではなく、環境差異
ハマったポイント
UnicornとNginxとを連携するためのソケットを/tmp配下に置くよう、サンプルではなっています。
ただし、CentOS7では/tmp配下で共有できないらしく、下記のエラーが発生する。
connect() to unix:/tmp/unicorn-example.socket failed (2: No such file or directory) while connecting to upstream
私は/var/run配下に変更しました。
色々と調べていて知ったこと
UNIX/INETドメインソケットについて
参考にしたQiita記事に従い *.sock を使用して連携していた。これをUNIXドメインソケットというらしい。
他の方法にINETドメインソケットがあり、指定したPort経由で連携する。
下記掲示板を見る限り、INETドメインソケットの方がトラブルが少ないよう。
Nginx で Unicorn起動時、白い画面にNot Found: / の表示 (Rails)
UNIXドメインソケット連携での動確
サイトにアクセスすればNginxのエラーかUnicornのエラーかの切り分けできると思うが、下記コマンドを使用してUnicornの動確ができる。
echo -e "GET / HTTP/1.0\n\n" | socat unix-connect:/tmp/unicorn.sock STDIO