Railsへのunicorn(Webサーバ)の導入手順です。Rails標準のWebサーバpumaはマルチスレッドなのでスレッドセーフな実装が必要です。一方でunicornはマルチプロセスなのでスレッドを意識せずに実装ができます。既存アプリケーションを運用する際にスレッドセーフ出ない場合は、unicornを選択するとよいと思います。
🐝 インストール Gemfile
に以下を追加してbundle install
を実行。
🎂 設定 config/unicorn.rb
にunicornの設定を記述。
rails_root = ENV['RAILS_ROOT' ] || File.expand_path('../../' , __FILE__ ) if ENV['RAILS_ENV' ] == 'development' worker_processes 1 else worker_processes ENV['UNICORN_WORKER_PROCESSES' ].to_i > 0 ? ENV['UNICORN_WORKER_PROCESSES' ].to_i : 2 preload_app true stderr_path "#{rails_root} /log/unicorn_stderr.log" stdout_path "#{rails_root} /log/unicorn_stdout.log" pid "#{rails_root} /tmp/pids/unicorn.pid" end working_directory rails_root timeout 300 listen 3000 listen "#{rails_root} /tmp/sockets/unicorn.sock" before_fork do |server, worker| ApplicationRecord.connection.disconnect! if defined ?(ApplicationRecord) && ApplicationRecord.connected? old_pid = "#{server.config[:pid ]} .oldbin" if old_pid != server.pid begin sig = (worker.nr + 1 ) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |_server, _worker| ApplicationRecord.establish_connection if defined ?(ApplicationRecord) end
👽 サーバの起動 次のコマンドでサーバを起動。
bundle exec unicorn_rails -c config/unicorn.rb
😎 参考リンク
🖥 VULTRおすすめ
「VULTR 」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTR のヘビーユーザーになので、「ここ 」から会員登録してもらえるとサービス開発が捗ります!