How to Run Rails App Server with Systemd and Ansible

Create a systemd service to run your rails app server. 

Ansible tasks to create the service:

---

...snip...

  vars:
    rails_root: "/myapp"
    rails_user: "webuser"

  tasks:
    - name: Setup Rails Web Service
      template:
        dest: /usr/lib/systemd/system/rails-web.service
        src: templates/rails-web.systemd.j2

    - name: Enable Rails Web Service
      systemd:
        name: rails-web
        daemon_reload: yes
        enabled: yes
        masked: no


The ansible template "rails-web.systemd.j2":

[Unit]
Description=Rails Web

[Service]
Type=simple
SyslogIdentifier=rails-web
User={{ rails_user }}
PIDFile={{ rails_root }}/tmp/pids/web.pid
WorkingDirectory={{ rails_root }}
ExecStart=/bin/bash -l -c "{{ rails_root }}/bin/rails s -b 0.0.0.0 -p 3000"
ExecReload=/bin/kill -s USR2 $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target


But you can also do this manually by creating the file `/usr/lib/systemd/system/rails-web.service` and then runninh `systemctl daemon-reload` to let systemd know about your service. Now you can start it up with systemctl start rails-web!