Ruby On Rails 部署指南
本页目录
开发是一回事,部署又是另一回事,往往部署要处理的东西比开发还要多,所以一套顺手的工具非常重要。现在虽然目前还做不到自动部署,但是一系列自动化工具也极大简化了繁琐的部署流程。这篇文章主要介绍如何使用 Mina+Puma+Nginx 部署一个 Ruby On Rails 的 Web 应用。
更新记录
- 2016.07.06: 初稿
Mina
Mina 是一个非常快的部署器,也是一个服务端自动化工具。至于为什么效率这么高,因为直接生成的是 bash 脚本,然后在远端服务器执行。和 Vlad 与 Capistrano 不同的是,Mina 不会每条指令都开一个新的 SSH 连接,而是每次部署只创建一个 SSH 连接,尽可能减少了 SSH 连接的开销。
安装非常简单 gem install mina 即可。其实使用也很简单,这里简单介绍一下:
首先,在项目中用命令 mina init 进行初始化,然后我们会得到 config/deploy.rb 文件。这是一个自带 task 的 Rake 文件,具体怎么写 task 可以参考这里,一个简单的配置可以像这样:
set :user, 'wdxtub'
set :domain, 'wdxtub.com'
set :deploy_to, '/var/www/wdxtub.com'
然后,执行 mina setup,这里会根据 deploy_to 中的路径来配置好目录结构,有一点需要注意,该路径需要是可读可写的。大概的目录结构为
/var/www/wdxtub.com/ # The deploy_to path
|- releases/ # Holds releases, one subdir per release
| |- 1/
| |- 2/
| |- 3/
| '- ...
|- shared/ # Holds files shared between releases
| |- logs/ # Log files are usually stored here
| `- ...
'- current/ # A symlink to the current release in releases/
最后就可以部署了,命令为 mina deploy
根据不同开发环境不同,有一些插件还是值得使用的,这里给出一个简单的列表:
mina/multistagemina/bundlermina/railsmina/pumamina/gitmina/rvmmina_sidekiq/tasks
Puma
Puma 是一个运行 Ruby/Rack 应用的简单快速多线程高并发的 HTTP 服务器程序,为了达到最好的性能,推荐使用实现了真线程的 Rubinius 或 JRuby。
使用起来也非常简单,先在 Gemfile 中添加 gem puma,然后手动在 config 文件夹下创建一个 puma.rb(或者 puma.rb.erb 也行),然后可以指定一些常见的参数,比如
workers Integer(ENV["WEB_CONCURRENCY"] || 20)
threads_count = Integer(ENV["MAX_THREADS"] || 20)
threads threads_count, threads_count
bind "unix://<%= settings.puma_socket %>"
daemonize
pidfile "<%= settings.puma_pid %>"
state_path "<%= settings.puma_state %>"
...
...
Nginx
Nginx 的配置不算特别难,但是有很多细节需要一定的 Nginx 基础。Nginx 部分之后会另外写一篇(等我慢慢熟悉一些后),这里简单提两点:
- upstream 中 server 要配置 puma 中 bind 的 socket
- root 要设置成服务器项目的根目录,也就是
puma.rb中的directory
最后需要重启服务器 nginx -s reload
这里因为各种不可抗力,不能贴出完整的配置代码,不过参考链接中的文章附有很全的代码,配置服务器这个事儿就是要劳神费力的,所以需要一个好运维!
参考链接
相关文章
- Python 编程思想:名字、对象与资源边界2026-11-06
- RESTful API 框架 HUG 指南2017-03-09
- Cpp 编码风格指南2017-01-29
- Javascript 编码风格指南2016-11-14