Как развернуть приложение ruby ​​on rails на nginx с помощью Passanger - PullRequest
0 голосов
/ 09 февраля 2019

Я потратил много часов и просто застрял: (

  1. Сборка приложения в ruby ​​на рельсах
  2. В среде разработчика, работающей с Apache
  3. Пришлось установить продуктв Ubuntu 18.04 LTS с nginx и пассажиром
  4. Я добавляю Пассажира в nginx, как это описано в Библиотеке пассажира здесь

Приложение не работает и в журналах отображается:

  1. 403 Запрещенная ошибка для пользователя root (https://cennik.leczymed.pl)

    2019/02/08 21:46:19 [ошибка] 4743 # 4743: * 2 индекса каталога "/ var/ www / html / cennik / public / "запрещено, клиент: XXX.XXX.XXX.XXX, сервер: cennik.leczymed.pl, запрос:" GET / HTTP / 2.0 ", хост:" cennik.leczymed.pl "

  2. 404 для других ссылок не найдено (например, https://cennik.leczymed.pl/rtg)

    2019/02/08 21:46:25 [ошибка] 4743 # 4743: * 2 открыто() "/ var / www / html / cennik / public / rtg" не удалось (2: нет такого файла или каталога), клиент: XXX.XXX.XXX.XXX, сервер: cennik.leczymed.pl, запрос: "GET /RTG HTTP / 2.0 ", хост:" cennik.leczymed.pl "

My конфигурации:

/ etc / nginx / sites-available / cennik.conf

server {
    listen 80;
    server_name cennik.leczymed.pl;

    include snippets/letsencrypt.conf;
    return 301 https://cennik.leczymed.pl$request_uri;
}


server {
    listen 443 ssl http2;
    server_name cennik.leczymed.pl;

    # Tell Nginx and Passenger where your app's 'public' directory is
    root /var/www/html/cennik/public;

    # log files
    access_log /var/log/nginx/cennik.leczymed.pl.access.log;
    error_log /var/log/nginx/cennik.leczymed.pl.error.log;

    # Turn on Passenger
    passenger_enabled on;
    passenger_ruby /usr/bin/ruby2.5;

    ssl_certificate /etc/letsencrypt/live/cennik.leczymed.pl/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/cennik.leczymed.pl/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/cennik.leczymed.pl/chain.pem;
    include snippets/letsencrypt.conf;
    include snippets/ssl.conf;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    location ^~ /assets/ {
     gzip_static on;
     expires max;
     add_header Cache-Control public;
    }

}

Все файлы приложения находятся в / var / www /html / cennik каталог.

drwxr-xr-x 16 cennik cennik 4096 Feb  8 20:53 .
drwxr-xr-x  6 root   root   4096 Feb  8 14:23 ..
drwxrwxr-x 10 cennik cennik 4096 Jul 27  2018 app
drwxr-xr-x  2 cennik cennik 4096 Jul 27  2018 bin
drwxr-xr-x  2 cennik cennik 4096 Feb  8 20:33 .bundle
drwx------  5 cennik cennik 4096 Feb  8 20:48 config
-rw-rw-r--  1 cennik cennik  130 Jul 27  2018 config.ru
drwx------  2 cennik cennik 4096 Jul 27  2018 db
-rw-rw-r--  1 cennik cennik 2371 Feb  8 19:58 Gemfile
-rw-r--r--  1 cennik cennik 5544 Feb  8 20:42 Gemfile.lock
drwxrwxr-x  7 cennik cennik 4096 Feb  8 19:47 .git
-rw-rw-r--  1 cennik cennik  687 Feb  8 19:47 .gitignore
drwxrwxr-x  4 cennik cennik 4096 Jul 27  2018 lib
drwxrwxr-x  2 cennik cennik 4096 Feb  8 20:53 log
drwxr-xr-x  2 cennik cennik 4096 Feb  8 20:53 node_modules
-rw-rw-r--  1 cennik cennik   64 Jul 27  2018 package.json
drwxrwxrwx  3 cennik cennik 4096 Feb  8 20:54 public
-rw-rw-r--  1 cennik cennik  227 Jul 27  2018 Rakefile
-rw-rw-r--  1 cennik cennik    5 Jul 27  2018 .ruby-version
drwxrwxr-x  2 cennik cennik 4096 Jul 27  2018 storage
drwxrwxr-x  9 cennik cennik 4096 Jul 27  2018 test
drwxrwxr-x  6 cennik cennik 4096 Jul 27  2018 tmp
drwxrwxr-x  3 cennik cennik 4096 Feb  8 20:33 vendor
-rw-r--r--  1 cennik cennik   86 Feb  8 20:53 yarn.lock

Владельцем всех файлов и каталогов является cennik пользователь (как описано в рецепте).

Каталог / public внутри RoR-приложения со всеми привилегиями (chmod 777).

Есть идеи, ребята?

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Обновление:

passenger-config --ruby-command

passenger-config was invoked through the following Ruby interpreter:
  Command: /usr/bin/ruby2.5
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
  To use in Apache: PassengerRuby /usr/bin/ruby2.5
  To use in Nginx : passenger_ruby /usr/bin/ruby2.5
  To use with Standalone: /usr/bin/ruby2.5 /var/lib/gems/2.5.0/gems/passenger-6.0.1/bin/passenger start

The following Ruby interpreter was found first in $PATH:
  Command: /home/artur/.rbenv/shims/ruby
  Version: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
  To use in Apache: PassengerRuby /home/artur/.rbenv/shims/ruby
  To use in Nginx : passenger_ruby /home/artur/.rbenv/shims/ruby
  To use with Standalone: /home/artur/.rbenv/shims/ruby /var/lib/gems/2.5.0/gems/passenger-6.0.1/bin/passenger start

Итак, я думаю, чтоКонфигурация nginx cennik.conf объявить правильное место для каталога ruby: / usr / bin / ruby2.5

Есть другие идеи, как это решить?

************************ ОБНОВЛЕНИЕ *******************************

ОК.Поэтому я нашел несколько вещей, которые могут помочь другим.Проблема как у меня только для Ubuntu обновленной до 18.04 с предыдущих версий.Установка nginx не является перезаписью confs для nginx (это можно решить вручную).Большая проблема заключается в том, что пакет nginx, который поставляется для Ubuntu 18.04, не скомпилирован с поддержкой пассажиров.Поэтому я сейчас ищу решение, как скомпилировать nginx с пассажирским модулем в нем и по-прежнему использовать его, мои функции systemctl - установка из исходников работает, но вы не можете работать с ним как с сервисом: (

Iнашел какой-то специальный рецепт для компиляции пакета Ubuntu с изменениями в процессе компиляции, но любая моя попытка установить правильное дополнение для пассажира уже не удалась.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 10 февраля 2019

Я добавляю Пассажира в nginx, как это описано в Библиотеке Пассажира здесь

Похоже, Пассажир не настроен.Поскольку вы используете RVM, у вас должно быть другое место для исполняемого файла ruby.Чтобы получить путь ruby, перейдите в корень приложения и выполните следующую команду и замените директиву passenger_ruby.

> cd /var/www/html/cennik
> passenger-config --ruby-command
# It shows output like this

passenger-config was invoked through the following Ruby interpreter:
  Command: /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  Version: ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-linux]
  To use in Apache: PassengerRuby /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  To use in Nginx : passenger_ruby /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby
  To use with Standalone: /home/deploy/.rvm/gems/ruby-2.3.5/wrappers/ruby /usr/bin/passenger start

Каталог / общедоступный внутри приложения RoR со всеми привилегиями (chmod 777).

Создание публичного каталога исполняемым не очень хорошая идея.Может содержать файлы, загруженные пользователями.Просто установите права доступа 755 и выберите пользователя или группу, в которой запущен nginx (www-data).

...