How to configure Rails application with Puma and Ngnix on CentOS by Srikant M. Mohapatra T T T T June 25, 2013June 29, 2015 Stay up to date with the latest tips and techniques of web and mobile app development services. Please leave this field empty Thanks for subscribing Andolasoft Blog! Puma is a multi-threaded high performance web server written in Ruby. Currently it is very popular in market as a ruby application server. We can use it for any kind of ruby web application that supports rack. Here, I have mentioned detailed steps to help you configure Rails application with Puma and Nginx on CentOS. Steps to install Puma: We can install puma via RubyGems. 1. Append the below line to your Gemfile, if you have Rails 3.0 or above: gem 'puma', '~> 2.0' 2. Then we have to issue the below command to install puma # bundle install 3. Now you can run your application with puma using the below command # RAILS_ENV=production bundle exec puma -e production –b unix:///var/run/my_app.sock You should see the following outcomes: Puma 2.0.1 starting... * Min threads: 0, max threads: 16 * Environment: production * Listening on unix:///var/run/my_app.sock Use Ctrl-C to stop 4. Press Ctrl-C and stop the process for now. We will start the server again after installation and configuration of ‘Ngnix’. Steps to Install Ngnix: 1. To install Nginx on CentOS type below commands # wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm # yum install nginx Configuring Ngnix: 1. First we have to create a virtual host file #vi /etc/nginx/conf.d/my-NewProject.conf 2. Now add the below line to your config file (Change fields as your requirement) upstream my_app { server unix:///var/run/my_app.sock; } server { listen 80 server_name www.example.com; # change to match your URL root /var/www/html/my_app/public; # I assume your app is located at this location location / { proxy_pass http://my_app; # match the name of upstream directive which is defined above proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 3.Then we have to restart the Ngnix #service nginx restart 4.After restarting the Ngnix we need to again start puma # cd /var/www/html/my_app/ # RAILS_ENV=production bundle exec puma -e production -b unix:///var/run/my_app.sock Puma 2.0.1 starting... * Min threads: 0, max threads 16 * Environment: production * Listening on unix:///var/run/my_app.sock Use Ctrl-C to stop</pre> <pre> Now you will be able to browse your application. Type the Server Name you mentioned on your virtual host configuration. For example: http://www.example.com How to run Puma as a demon: 1. If you want to run puma as a foreground process (daemon) then start puma with –d option with the following command # RAILS_ENV=production bundle exec puma -e production -d -b unix:///var/run/my_app.sock 2.To verify whether puma is running or not we have to issue the below command # ps aux | grep puma root 19119 13.1 1.3 43276 27792 ? Sl 21:02 0:01 ruby /usr/local/rvm/gems/ruby-1.9.3-p0@tapas1/bin/puma -e production -d -b unix:///var/run/my_app.sock Finally-steps to stop and restart our puma server ‘pumactl’ is a command line that helps to stop and restart the application server. It takes parameter from the file where we store the puma process state. 1.Currently we have to kill the running process of puma by issuing following command. pkill –f puma 2. You can again verify the process is running or not by issuing the following command: # ps aux | grep puma 3.Then start the puma with –S option RAILS_ENV=production bundle exec puma -e production -d -b unix:///var/run/my_app.sock -S /var/run/my_app.state --control 'unix:///var/run/my_app_ctl.sock' 4.Now puma would generate the file /var/run/my_app.state like below content: pid: 20937 config: !ruby/object:Puma::Configuration options: :min_threads: 0 :max_threads: 16 :quiet: true :debug: false :binds:- unix:///var/run/my_app.sock :workers: 0 :daemon: true :worker_directory: /var/www/html/my_app/ :environment: production :state: /var/run/my_app.state :control_url: unix:///var/run/my_app_ctl.sock :control_auth_token: c0c3983017b972da3318a33349e8ee 5.Now, you can restart and stop your application with ‘pumactl’ using the file /var/run/my_app.state a) To restart puma server issue the following command bundle exec pumactl -S /var/run/my_app.state restart b) To stop the puma server issue the following command bundle exec pumactl -S /var/run/my_app.state stop Following the above mentioned steps would result you with a clean configuration of Rails application with ‘Puma’ and ‘Nginx’. Recommended Reading: New features of Rails4 Related Posts: How to Install & Configure Redis-Server on Centos/Fedora Server Asynchronous processing with Sidekiq gem in Rails Usage of PDFKit with Rails 3.2.8 and Ruby 1.9.3