Развернуть Rails + React + Puma + Nginx в Heroku не удалось - PullRequest
1 голос
/ 17 октября 2019

Хочу развернуть RoR + React SPA на героку как один проект. В качестве типичной производственной среды используйте Nginx в качестве веб-сервера и пользователя Puma в качестве сервера приложений.

Я пытался следовать readme из https://github.com/heroku/heroku-buildpack-nginx.

Но после развертывания heroku выскакивает ошибка

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

Ниже приведены мои конфиги

heroku buildpacks

heroku/nodejs # index 1
heroku/ruby   # index 2
https://github.com/heroku/heroku-buildpack-nginx.git # index 3

Procfile

release: bundle exec rails db:migrate
web: bin/start-nginx bundle exec puma -C config/puma.rb

config / puma.rb

max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

environment ENV.fetch("RAILS_ENV") { "development" }
plugin :tmp_restart

bind ENV.fetch('PUMA_SOCK') { 'unix:///tmp/nginx.socket' }

on_worker_fork do
  FileUtils.touch('/tmp/app-initialized')
end

config / nignx.conf.erb => Я удалил неважную конфигурацию для этогофайл слишком длинный

http {
    upstream app_server {
        server unix:/tmp/nginx.socket fail_timeout=0;
    }

    server {
        listen <%= ENV["PORT"] %>;
        server_name _;
        keepalive_timeout 5;

        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass http://app_server;
        }
    }
}

1 Ответ

0 голосов
/ 19 октября 2019

РЕДАКТИРОВАТЬ : Я думаю, что procfile также должен запускать Nginx:

 web: bin/start-nginx bundle exec puma -C config/puma.rb

Помните, что для пакета сборки nginx вы должны отключить режим демона в nginx.conf:

daemon off;

EDIT2 : если эта строка не работает, попробуйте запустить Nginx напрямую (это взлом, не проверено)):

 web: bin/nginx -p . -c config/nginx.conf & ; bundle exec puma -C config/puma.rb

Такжеубедитесь, что журналы nginx направляются на стандартный вывод, поместив его в nginx.conf:

daemon off;
error_log /dev/stdout info;
http {
  access_log /dev/stdout;
  ...
}

ORIGINAL :

В документации по пакету сборки указано:

Как правило, для веб-серверов, которые не предназначены для эффективного неблокирующего ввода-вывода, нам будет полезно иметь NGINX для обработки всех операций ввода-вывода

ОднакоPuma - эффективный неблокирующий сервер ввода-вывода. Вы должны иметь возможность использовать его непосредственно на Heroku dyno.

Самое большое преимущество, которое Nginx может предложить серверу Puma, - это работа со статическими файлами - что ваша конфигурация не выполняет.

Если вы не используете Nginx для статических файлов, вы можете пропустить дополнительные задержки, добавив прокси-сервер Nginx. Кроме того, функции безопасности Heroku должны (но не могут) охватывать все базы, которые Nginx может предложить вам на данный момент.

Если вам нужна дополнительная скорость для статических файлов - некоторые серверы Ruby (такие как йод или agoo ) обеспечивают быструю статическую файловую службу, позволяющую пропустить слой Nginx и уменьшить задержку.

...