3
votes

right now i have a droplet in DO and experimenting in rails deployment procedures. I have a rails 5 in ubuntu 16 and have done all necessary procedures to be able to deploy my app except that currently stuck in nginx puma and systemd. I've already seen DO's tutorials but the problem is that they use upstart as the script for init. As a complete beginner in nginx and linux systems, i have no idea how to start my app with nginx. the last procedures i made was

  • install nginx
  • test nginx, it is running
  • put some configs on config/puma.rb*

    # Change to match your CPU core count
    workers 2
    
    # Min and Max threads per worker
    threads 1, 6
    
    app_dir = File.expand_path("../..", __FILE__)
    shared_dir = "#{app_dir}/shared"
    
    # Default to production
    rails_env = ENV['RAILS_ENV'] || "production"
    environment rails_env
    
    # Set up socket location
    bind "unix://#{shared_dir}/sockets/puma.sock"
    
    # Logging
    stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true
    
    # Set master PID and state locations
    pidfile "#{shared_dir}/pids/puma.pid"
    state_path "#{shared_dir}/pids/puma.state"
    activate_control_app
    
    on_worker_boot do
      require "active_record"
      ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
      ActiveRecord::Base.establish_connection(YAML.load_file("#    {app_dir}/config/database.yml")[rails_env])
    end
    
  • edited /etc/nginx/sites-available/default*

    upstream app {
        # Path to Puma SOCK file, as defined previously
        server unix:/home/deploy/appname/shared/sockets/puma.sock fail_timeout=0;
    }
    
    server {
    listen 80;
    server_name localhost;
    
    root /home/deploy/appname/public;
    
    try_files $uri/index.html $uri @app;
    
    location @app {
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
    
    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
    }
    
  • added /etc/systemd/system/puma.service

*base from https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-puma-and-nginx-on-ubuntu-14-04

this is the code of puma.service

[Unit]
Description=Puma HTTP Server
After=network.target

# Uncomment for socket activation (see below)
# Requires=puma.socket

[Service]
Type=simple
User=(myUser)
WorkingDirectory=/home/(myUser)/apps/(appName)

# ExecStart=<WD>/sbin/puma -b tcp://0.0.0.0:9292 -b ssl://0.0.0.0:9293?key=key.pem&cert=cert.pem
# ExecStart=/usr/local/bin/bundle exec --keep-file-descriptors puma -e production
ExecStart=/usr/local/bin/puma -C /home/(myUser)/apps/(appName)/config/puma.rb

Restart=always

[Install]
WantedBy=multi-user.target

im having exit 203, check some things and found out /usr/local/bin/puma doesnt exist in my linux.

Can someone help my setting up a proper systemd service? i really have no experience in this and im not sure what to put at ExecStart

1

1 Answers

2
votes

Install puma if it is not already.

Use which puma to find out where puma is installed, then put that path on ExecStart= line.