Railsって便利ですね。
$ rails server
これだけで、サーバーが立ち上がって動作確認できちゃいますもんね。
ただ、この場合はrackサーバーとしてpumaが立ち上がるようです。(WEBサーバーはApache?)
とりあえず公開するサーバーはNginx + unicornにしたので、Macの開発環境も合わせてみます。
「Nginx+UnicornでRailsを動かすon Mac」を参考に。ハマリポイントがあったのでそれも含めて下記にまとめときます。
目次
nginxとunicornをインストール
$ brew install nginx
$ gem install unicorn
railsプロジェクトを作る(例としてここではHelloRails)
$ rails new HelloRails
configディレクトリにunicorn.rbを作る
$ cd HelloRails
$ vi config/unicorn.rb
unicorn.rbに必要事項を記載
rails_root = File.expand_path('../../', __FILE__)
worker_processes 2
working_directory rails_root
listen "#{rails_root}/tmp/unicorn.sock"
pid "#{rails_root}/tmp/unicorn.pid"
stderr_path "#{rails_root}/log/unicorn_error.log"
stdout_path "#{rails_root}/log/unicorn.log"
unicornをデーモンとして起動
$ unicorn_rails -c config/unicorn.rb -E development -D
ちなみに停止する時は以下。
$ kill -QUIT `cat tmp/unicorn.pid`
nginxを起動
$ sudo nginx
ブラウザでhttp://localhost:8080でアクセスしてwelcome to nginx!が表示されればOK。
nginxのconfファイルを編集
/usr/local/etc/nginx/serversに適当な名前のファイルを作る。
cd /usr/local/etc/nginx/servers
vi HelloRails.conf
以下を記載。
upstream unicorn {
server unix:/Users/ky/RubyProjects/HelloRails/tmp/unicorn.sock;
}
server {
listen 8081;
server_name localhost;
root /Users/ky/RubyProjects/HelloRails/public;
access_log /usr/local/var/log/nginx/HelloRails_access.log;
error_log /usr/local/var/log/nginx/HelloRails_error.log;
client_max_body_size 100m;
error_page 500 502 503 504 /500.html;
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://unicorn;
}
}
server unix:***のところとHelloRailsは環境に合わせて適宜変更。
ファイルを作成したらnginxを再起動します。
$ sudo nginx -s reload
これで、ブラウザでhttp://localhost:8081にアクセスしてうまく表示されればいいんですが、私の場合502 Bad Gatewayが表示されてしまいました。
エラーログ/usr/local/var/log/nginx/HelloRails_error.logを確認すると、unicorn.sock failed (13: Permission denied)の文字が。
$ ps aux | grep nginx
してみると、
ky 26206 0.4 0.0 4268792 1028 s001 S+ 1:36PM 0:00.01 grep nginx
nobody 26136 0.0 0.0 4335716 1720 ?? S 1:22PM 0:00.01 nginx: worker process
root 26068 0.0 0.0 4327288 1972 ?? Ss 1:06PM 0:00.01 nginx: master process nginx
と、rootとnobodyで立ち上がってるのが良くないのかな?と思い、nginxのユーザーを変更します。
nginx.confのuserを変更
$ cd /usr/local/etc/nginx
$ vi nginx.conf
user ky staff;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
(以下略)
$ sudo nginx -s reload
macではデフォルトでグループはstaffのようですね。
これで無事http://localhost:8081でつながりました。
[…] 開発環境(Mac)にnginx + unicorn入れたので、DBもMariaDBにしてみる。 […]
[…] sus4 BlogRails on Nginx + unicorn on MacOSXhttps://www.b13.app/?p=620Railsって便利ですね。rails serverこれだけで、サーバーが立ち上がって動作確認できちゃいますもんね。ただ、この場合はrackサ […]
[…] Rails on Nginx + unicorn on MacOSX […]