Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to start puma with unix socket

Tags:

I have followed this link to configure nginx with puma but when I start the server with
bundle exec puma -e development -b unix:///var/run/my_app.sock
it throws Permission denied - "/var/run/my_app.sock" (Errno::EACCES) error.

but when I start the server with bundle exec puma -e development
it is started with tcp://0.0.0.0:9292

my_app.sock file does not exist in /var/run/

how do I start the server with unix socket and access the application through the domain name given in the my_app.conf file.

Can you please anyone help me?.

like image 639
Thrikal Samy Avatar asked Jul 03 '13 14:07

Thrikal Samy


People also ask

How do you start a puma socket?

To access application through domain name you should use something like nginx and do configuration for it. You should change /var/www/my_app and my_app.com to appropriate values. Restart nginx: sudo service nginx restart . Link your domain name to server IP (via hosts -file or DNS-provider).

How does PUMA work?

Puma is a threaded Ruby HTTP application server processing requests across a TCP and/or UNIX socket. Puma processes (there can be one or many) accept connections from the socket via a thread (in the Reactor class).


1 Answers

To start puma with socket binding just use /tmp directory:

bundle exec puma -e development -b unix:///tmp/my_app.sock 

To access application through domain name you should use something like nginx and do configuration for it.

To install nginx in Ubuntu just run next command:

sudo apt-get install nginx 

Run sudo nano /etc/nginx/sites-available/my_app.conf and place configuration below into this file (Ctrl + X, Y - to save changes):

upstream my_app {   server              unix:///tmp/my_app.sock; }  server {   listen              *:80;   server_name         my_app.com;    access_log          /var/log/nginx/my_app-access.log;    location /favicon.ico {     root              /var/www/my_app/public/assets/favicon.ico;     gzip_static       on;     expires           max;     add_header        Cache-Control public;   }    location / {     root              /var/www/my_app/public;     try_files         $uri @app;     gzip_static       on;     expires           max;     add_header        Cache-Control public;   }    location @app {     proxy_pass        http://my_app;     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 http;     proxy_set_header  Host $http_host;     proxy_redirect    off;     proxy_next_upstream error timeout invalid_header http_502;   }    } 

You should change /var/www/my_app and my_app.com to appropriate values.

Add symlink into enabled sites sudo ln -fns /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/

Restart nginx: sudo service nginx restart.

Link your domain name to server IP (via hosts-file or DNS-provider).

like image 193
Viacheslav Molokov Avatar answered Sep 28 '22 00:09

Viacheslav Molokov