弹性豆秆中的非线程安全Rails 5 App

问题描述 投票:0回答:1

我正在弹性beanstalk中部署我的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

如此处所示,worker的数量等于我的CPU核心数量。

但是,在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

如何降低线程数并增加弹性beanstalk中的工作者数量?考虑到我启用了负载均衡器,上面的配置由弹性beanstalk管理。

在Heroku的情况下,我可以使用puma.rb进行管理,但是在弹性beanstalk中除了更改文件之外我没有看到任何其他方法

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

手动。当实例数量减少或向上时,手动修改将导致问题。

ruby-on-rails amazon-elastic-beanstalk puma
1个回答
0
投票

如果你已经解决了问题,不确定。我有一个类似的问题,我使用.ebextensions解决了它。

您可以在代码中的config目录中创建一个新的pumaconf.rb文件。然后在.ebextensions目录中,创建一个文件,该文件将复制出新的pumaconf.rb并替换默认的pumaconf.rb。

另外,如果你这样做的话。在.ebextensions代码中,将此路径用于新文件

/var/app/on的CK/config/puma conf.日本

并不是

/var/app/current/config/puma conf.日本

因为使用后者,不会复制出你最新的puma config.rb

cp /var/app/ondeck/config/pumaconf.rb /opt/elasticbeanstalk/support/conf/pumaconf.rb
© www.soinside.com 2019 - 2024. All rights reserved.