Ruby on Rails 4.1でUnicorn + Nginxでデプロイ(Ubuntu)
Sponsored Links
皆さんこんにちは
お元気ですか。私は元気です。
思ったよりも手こずったUnicorn + Nginxでのデプロイを行ってみます。
既にRailsはinstallされているとします。
まずは、Unicornから
Unicorn
Gemfile
gem unicorn
Unicornの設定
configの直下にunicorn.rbを置き、以下のように記載する。
@app_path = '/home/[apppath]' #自分のディレクトリを入力してください。 worker_processes 2 working_directory "#{@app_path}/" preload_app true timeout 30 #listen "/tmp/unicorn.sock", :backlog => 64 listen 8080, :tcp_nopush => true pid "/tmp/unicorn.pid" stderr_path "#{@app_path}/log/unicorn.stderr.log" stdout_path "#{@app_path}/log/unicorn.stdout.log"
起動
bundle exec unicorn_rails -c config/unicorn.rb -E development -D
もしこの地点でエラーが出るようであれば、logを見に行こう、場所はlog/unicorn.stderr.logにある
エラー対策
You have already activated rack 1.6.0, but your Gemfile requires rack 1.5.2. Prepending `bundle exec` to your command may solve this
最後のコマンドでbundle execを付け忘れることで発生するエラー
Unknown database '[db]_production'Run `$ bin/rake db:create db:migrate` to create your database (ActiveRecord::NoDatabaseError)
データベース作成を忘れている時に発生する。productionの作り忘れ時に発生する。
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
mysql.sockがない時に発生します。
以下のコマンドを打ってsockの場所を探して設定を更新してください。
mysqladmin version -p
Nginx
インストール
sudo apt-get install nginx
設定ファイル
場所は/etc/nginx/nginx.confにあります。
upstream unicorn_server { server localhost:8080; } server { listen 80; client_max_body_size 4G; server_name _; keepalive_timeout 5; # Location of our static files root [rails appの場所]/public; try_files $uri @unicorn; location @unicorn { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn_server; } error_page 500 502 503 504 /500.html; location = /500.html { root [rails appの場所]/public; } }
nginx の再起動
sudo /etc/init.d/nginx restart
動作確認
いつものサンプルが映れば問題無いです。
その他
Unicornのシャットダウン
$ps -ef | grep unicorn | grep -v grep tereka 25234 1 1 16:54 ? 00:00:04 unicorn master -E production -c config/unicorn.rb -D tereka 25240 25234 0 16:55 ? 00:00:00 unicorn worker[0] -E production -c config/unicorn.rb -D tereka 25243 25234 0 16:55 ? 00:00:00 unicorn worker[1] -E production -c config/unicorn.rb -D $kill -QUIT 25234
Nginxの文法確認
sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful