使用Puma部署Rails项目

Puma是一个基于Ruby的Web Server服务器,与其他Ruby Web服务器不同的是,Puma是为速度与并发而生的。它和Unicorn的很大不同是,Puma主要基于多线程,而Unicorn是基于多进程,所以Puma的内存占用要比Unicorn小很多。(当然基于多线程最大的问题就是线程安全的问题,这个在Ruby1.9之后已经逐步得到比较完美的解决了,Ruby1.8就别指望跑Puma了。)

下面是Puma的官方给出的数据,内存占用占据明显优势,而速度方面也是独占鳌头,所以Puma在部署中越来越流行了。

使用Puma部署Rails项目_第1张图片
Paste_Image.png

使用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

你可能感兴趣的:(使用Puma部署Rails项目)