Безрезьбезопасный Rails 5 App в эластичном стебле - PullRequest
0 голосов
/ 12 декабря 2018

Я развертываю свое приложение Rails 5.2 в эластичном бобовом стебле с puma в качестве сервера приложений и Nginx по умолчанию в Elastic Beanstalk.

Я столкнулся с проблемой состояния гонки.После того, как я проверил больше деталей в экземпляре контейнера, я нашел это:

#example /opt/elasticbeanstalk/support/conf/pumaconf.rb
directory '/var/app/current'
threads 8, 32
workers %x(grep -c processor /proc/cpuinfo)
bind 'unix:///var/run/puma/my_app.sock'
pidfile '/var/run/puma/puma.pid'
stdout_redirect '/var/log/puma/puma.log', '/var/log/puma/puma.log', true
daemonize false

Как видно здесь, число рабочих равно количеству ядра моего процессора.

Однако в Heroku.com мы можем сделать это:

# config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

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

В случае с Heroku я могу управлять с помощью puma.rb, однако в эластичном бобовом стебле я не вижу никакихДругой подход помимо изменения файла

/opt/elasticbeanstalk/support/conf/pumaconf.rb

вручную.Изменение вручную вызовет проблемы при уменьшении или увеличении количества экземпляров.

1 Ответ

0 голосов
/ 04 апреля 2019

Не уверен, если вы решили свою проблему.У меня была похожая проблема, и я решил ее, используя .ebextensions.

Вы можете создать новый файл pumaconf.rb в вашем каталоге конфигурации в вашем коде.Затем в каталоге .ebextensions создайте файл, который скопирует новый файл pumaconf.rb и заменит pumaconf.rb по умолчанию.

Кроме того, если вы собираетесь это сделать таким образом.В вашем коде .ebextensions используйте этот путь для вашего нового файла

/ var / app / ondeck / config / pumaconf.rb

, а не

/ var / app /current / config / pumaconf.rb

Поскольку, используя последний, не скопируйте ваш последний pumaconf.rb

cp /var/app/ondeck/config/pumaconf.rb /opt/elasticbeanstalk/support/conf/pumaconf.rb
...