Ruby/rails/unicorn
提供: 初心者エンジニアの簡易メモ
目次
unicornとは
rubyのアプリサーバー
unicornインストール
gem install unicorn
プロジェクトにunicorn設定追加
新規追加
config/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" listen 8080
別のアプリで8080を使っている場合はport番号を変える
unicorn起動
$ unicorn_rails -c config/unicorn.rb -D
環境変数はdevelopment(開発用)となる
unicorn停止
$ kill -QUIT `cat tmp/unicorn.pid`
以下エラーが出る場合
Bundler Error Backtrace: from /home/linux/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/bundler-1.16.0/lib/bundler/runtime.rb:80:in `block (2 levels) in require'
以下のコメントアウトを外す
vi Gemfile
gem 'therubyracer', platforms: :ruby
unicorn起動(環境指定する)
developmentの場合
$ unicorn_rails -c config/unicorn.rb -E development -D
testの場合
$ unicorn_rails -c config/unicorn.rb -E test -D
productionの場合
$ unicorn_rails -c config/unicorn.rb -E production -D
productionで500errorとなる場合
ruby/rails/SECRET_KEY_BASE設定 [ショートカット]
を確認する
productionの場合は以下でassetsを作っておく
rails assets:precompile
unicorn-nginx連携
proxy_passとupstreamの文字列は同じにする。
upstream unicorn_server_production { server unix:/home/linux/helloworld/tmp/unicorn.sock; } server { listen 80; server_name localhost; root /home/linux/helloworld/public; access_log /var/log/nginx/ruby_helloworld_access.log; error_log /var/log/nginx/ruby_helloworld_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_production; } }
nginxでPermissionエラーが出る時
connect() to unix:/~/tmp/unicorn.sock failed (13: Permission denied) while connecting to upstream, client:
nginxをrootに変えればとりあえず、うまくいく。
$ sudo vi /etc/nginx/nginx.conf # user nginx; user root;
重い場合は
ハイフンを使うと重くなる?
envごとの変更処理反映について
developmentはunicornを再起動しなくてもscriptの変更が反映される。
productionはunicornを再起動するまでscriptの変更が反映されない。