Rails 3.2.22.2 + Puma + Heroku的配置是什么?

时间:2016-04-30 11:19:51

标签: ruby-on-rails-3 heroku puma

我读过Richard Schneeman的文章和其他一些文章。 ;-) 我还在努力解决这个问题。

以下是我在Gemfile中添加的一些宝石来对我的应用进行基准测试:

document.write

在开发和登台环境中有很多基准测试之后,我知道我的应用程序的速度不够快但是没有内存泄漏(有时可能会有一些小的内存膨胀)。

newapp-staging 应用是 oldapp-production 应用的新版本(又名:新前端,升级后的宝石,优化查询......)。 请查看截图( oldapp-production 使用webrick, newapp-staging 使用puma)

所以这里有两个简单的问题:

问题#1

newapp-staging 应用正在使用ruby'2.2.0'& rails'3.2.22.2'并且由于我的代码和相关的gem,我无法确保它是线程安全的,所以...我必须一次使用1个线程。美洲狮在这里有优势吗?度量标准告诉我没有。 或者...我的配置不好。 (可能缺少 preload_app!或其他东西?)这是我的Procfile:

gem 'airbrake'
gem 'newrelic_rpm'
gem 'stackprof'
gem 'derailed', group: :development
gem 'rack-mini-profiler'
gem 'flamegraph'
gem 'memory_profiler'
gem "skylight"

问题#2

Unicorn可以作为替代品吗?

感谢您的时间和建议。

干杯

OLD APP NEW APP

1 个答案:

答案 0 :(得分:1)

使用独角兽是这里最好的举动。这是我的配置,如果这可以帮助任何人。

的Gemfile:

gem 'unicorn'
gem 'unicorn-rails'
group :production, :staging do
  gem 'unicorn-worker-killer'
end

Procfile:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work

配置/ unicorn.rb

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
timeout 15
preload_app true
before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end
after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

config.ru

if ENV['RAILS_ENV'] == 'production' || ENV['RAILS_ENV'] == 'staging'
  require 'unicorn/worker_killer'
  use Unicorn::WorkerKiller::MaxRequests, 768, 1024, true
  use Unicorn::WorkerKiller::Oom, (450*(1024**2)), (490*(1024**2)), 16, true
end
require ::File.expand_path('../config/environment',  __FILE__)
use Rack::Deflater
run MyApp::Application

On Heroku:

2 x `Standard 2X dynos` for web
1 x `Standard 1X dyno` for worker

Heroku配置vars:

SENSIBLE_DEFAULTS: enabled (以防万一)& WEB_CONCURRENCY: 2

干杯