Rails Insights

Using the Puma App Server with Ruby

Introduction

When it comes to deploying Ruby applications, one of the most popular choices for a web server is Puma. Puma is a concurrent web server that is known for its speed and efficiency. In this article, we will explore how to use the Puma app server with Ruby to deploy your applications.

Installing Puma

Before we can start using Puma, we need to install it. You can do this by adding the Puma gem to your Gemfile:

gem 'puma'

Then, run bundle install to install the gem:

bundle install

Configuring Puma

Once Puma is installed, you can configure it for your Ruby application. Create a configuration file called puma.rb in the config directory of your application:

# config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

In this configuration file, you can specify the number of workers and threads for Puma to use, as well as other settings such as the port and environment.

Starting Puma

To start Puma, you can use the following command:

bundle exec puma -C config/puma.rb

This will start Puma using the configuration file we created earlier. You should see output indicating that Puma is running and listening on a specific port.

Using Puma in Production

When deploying your Ruby application in a production environment, it is recommended to use Puma with a reverse proxy server such as Nginx or Apache. This setup allows the reverse proxy server to handle incoming requests and distribute them to Puma for processing.

To configure Nginx to work with Puma, you can add a configuration block like the following to your Nginx configuration file:

upstream app {
  server unix:///path/to/your/app.sock;
}

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://app;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

Replace /path/to/your/app.sock with the path to the Unix socket file that Puma is using. This configuration tells Nginx to pass incoming requests to the Puma server running on the specified socket.

Conclusion

In conclusion, Puma is a powerful and efficient web server that is well-suited for deploying Ruby applications. By following the steps outlined in this article, you can easily set up and configure Puma for your Ruby application. Whether you are running your application in development or production, Puma is a great choice for serving your Ruby code to the world.

Published: June 17, 2024

© 2024 RailsInsights. All rights reserved.