как запустить puma с сокетом unix

Я перешел по этой ссылке настроить nginx с puma, но когда я запускаю сервер с
bundle exec puma -e development -b unix:///var/run/my_app.sock
, он выдает Permission denied - "/var/run/my_app.sock" (Errno::EACCES) error.

но когда я запускаю сервер с bundle exec puma -e development
, он запускается с tcp://0.0.0.0:9292

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

как запустить сервер с сокетом unix и получить доступ к приложению через доменное имя, указанное в файле my_app.conf.

Не могли бы вы мне помочь?


person Thrikal Samy    schedule 03.07.2013    source источник


Ответы (1)


Чтобы запустить puma с привязкой к сокету, просто используйте каталог /tmp:

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

Чтобы получить доступ к приложению через доменное имя, вы должны использовать что-то вроде nginx и настроить его.

Чтобы установить nginx в Ubuntu, просто выполните следующую команду:

sudo apt-get install nginx

Запустите sudo nano /etc/nginx/sites-available/my_app.conf и поместите конфигурацию ниже в этот файл (Ctrl + X, Y - для сохранения изменений):

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;
  }   
}

Вы должны изменить /var/www/my_app и my_app.com на соответствующие значения.

Добавить символическую ссылку на разрешенные сайты sudo ln -fns /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/

Перезапустите nginx: sudo service nginx restart.

Свяжите свое доменное имя с IP-адресом сервера (через hosts-файл или DNS-провайдера).

person Viacheslav Molokov    schedule 03.07.2013
comment
Я рад это слышать. Пожалуйста, примите этот ответ, если он вам поможет. - person Viacheslav Molokov; 04.07.2013
comment
Лол, мое редактирование было отклонено. Неверный протокол (в request объекте будет порт 443, протокол 'https://' и .ssl? true) необходимо изменить proxy_set_header X-Forwarded-Proto https; на proxy_set_header X-Forwarded-Proto $scheme;. - person hlcs; 09.07.2014
comment
@2nd Спасибо за ваш комментарий. Только что исправил. - person Viacheslav Molokov; 30.07.2014
comment
Кроме того, в некоторых дистрибутивах (например, Centos8) systemd units есть параметр настройки службы, который указывает системе создать private temporary files, что означает доступ только для одного и того же процесса. Это также может быть проблемой. Чтобы этого не произошло, установите PrivateTmp=No в блоке [Service] файла настройки службы. - person Fernando Vieira; 04.03.2020