Puma是一个基于Ruby的Web Server服务器,与其他Ruby Web服务器不同的是,Puma是为速度与并发而生的。它和Unicorn的很大不同是,Puma主要基于多线程,而Unicorn是基于多进程,所以Puma的内存占用要比Unicorn小很多。(当然基于多线程最大的问题就是线程安全的问题,这个在Ruby1.9之后已经逐步得到比较完美的解决了,Ruby1.8就别指望跑Puma了。)
下面是Puma的官方给出的数据,内存占用占据明显优势,而速度方面也是独占鳌头,所以Puma在部署中越来越流行了。
使用Puma
和unicorn一样,使用Puma之前先在Gemfile中添加:
gem 'puma'
之后添加配置文件config/puma.rb
#!/usr/bin/env puma
environment 'production'
threads 2, 32 # minimum 2 threads, maximum 64 threads
workers 2
app_name = 'rails_test'
application_path = "/var/www/#{app_name}"
directory "#{application_path}/current"
pidfile "#{application_path}/shared/tmp/pids/puma.pid"
state_path "#{application_path}/shared/tmp/sockets/puma.state"
stdout_redirect "#{application_path}/shared/log/puma.stdout.log", "#{application_path}/shared/log/puma.stderr.log"
# bind "unix://#{application_path}/shared/tmp/sockets/puma.sock" #绑定sock
bind 'tcp://127.0.0.1:801' #绑定端口801
worker_timeout 60
daemonize true
preload_app!
关于所有的配置参数,可以在https://github.com/puma/puma/blob/master/examples/config.rb 里面了解。
启动重启
bundle exec puma -C config/puma.rb
bundle exec pumactl --state tmp/sockets/puma.state stop
bundle exec pumactl --state tmp/sockets/puma.state restart
参考
https://ruby-china.org/topics/10832
https://ruby-china.org/topics/15140