世界上最伟大的投资就是投资自己的教育

首页服务器部署
随风 · 练气

部署之使用 mina 来部署 Ruby on Rails 应用之 mina-multistage (十一)

随风发布于1648 次阅读

1. 介绍

当网站开发得差不多了,要给老板或客户看效果,你总不能拿自己的机器,开个 localhost 服务的给他们看吧,万一老板在外地呢。也不能直接跑到线上真实的生产环境看效果,因为测试总免不了产生无用的数据。一般来说,一个网站有两套线上环境,打个比方,假如你生产环境的域名叫 www.example.com,这个时候,可以准备一个域名叫 staging.example.com,专门用于测试。这两套环境可以部署在另一台机器,也可以不同的机器,但一定要是不同的数据库,因为测试环境总不能影响真正的生产环境的数据。测试环境可以随便乱填数据,生产环境可不行。这样一来公司的测试人员就可以直接到线上测试环境进行业务测试。

我们一般是用 git 作为版本控制工具来管理代码,git 的分支功能就可以很好的配合这个需求。有两个线上环境,那就对应两个分支。www 那个线上环境就对应 master 分支,而 staging 那个就对应 staging 分支。两个线上环境的代码不一样。数据库和配置也应该是独立的。那就是两个 rails 应用。最好能够这样:我们是使用 mina 来部署的,当使用mina production deploy就部署线上的 www 环境,而使用mina staging deploy就部署 staging 环境。

然而,这一切都可以通过mina-multistage来办到。

2. 使用

来开始使用mina-multistage部署多个 unicorn 应用。

添加下面这行到 Gemfile 文件

gem 'mina-multistage', require: false

然后执行bundle

然后把mina/multistage添加到config/deploy.rb文件。

require 'mina/multistage'
require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
require 'mina/rbenv'  # for rbenv support. (http://rbenv.org)
require 'mina/unicorn'

执行bundle exec mina multistage:init生成config/deploy/staging.rb还有config/deploy/production.rb,刚好是我们需要的环境。

# config/deploy/production.rb
set :domain, 'www.rails365.net'
set :deploy_to, '/home/eason/tt_deploy'
set :repository, 'git@git.coding.net:tonyjin/rails365.git'
set :branch, 'master'
set :user, 'eason'
set :unicorn_config, -> { "#{deploy_to}/#{current_path}/config/unicorn/production.rb" }
set :bundle_gemfile, "#{deploy_to}/#{current_path}/Gemfile"

# config/deploy/staging.rb
set :domain, 'staging.rails365.net'
set :deploy_to, '/home/eason/code'
set :repository, 'git@git.coding.net:tonyjin/rails365.git'
set :branch, 'develop'
set :user, 'eason'
set :unicorn_config, -> { "#{deploy_to}/#{current_path}/config/unicorn/staging.rb" }
set :bundle_gemfile, "#{deploy_to}/#{current_path}/Gemfile"

这两个文件的内容都是差不多的。不同的是你要指定不同的域名 (domain),也就是部署的机器,还有分支名 (branch)。

还有一个要注意的是unicorn_config是我们指定的 unicorn 的配置文件的路径。这个先不管。

现在我们先往config/deploy.rb文件,把上面有的项删除掉,比如domaindeploy_to等,因为现在每个环境 (production, staging) 都各自有一套配置,所以不需要在config/deploy.rb文件中指定。

下面来说一下 unicorn,unicorn 也是需要单独配置的,所以在config/deploy/production.rbconfig/deploy/staging.rb文件中分别指定了unicorn_config变量。

按照指定的位置,我们先创建config/unicorn目录,然后复制之前的config/unicorn.rb各一份,存成config/unicorn/staging.rbconfig/unicorn/production.rb,再把config/unicorn.rb文件删除。

为什么我知道是unicorn_config这个变量呢,因为我查看了mina-unicorn的源码,它的配置文件一般就是找unicorn_config这个变量指定的值,如果没设定这个变量,就会找config/unicorn.rb文件。所以知道了这点,我要把 unicorn 换成 puma 那也是很简单的事。

这样基本就 OK 了。

下面可以指定一个环镜来部署了。

$ mina staging deploy
$ mina production deploy

mina-multistage还有一个功能要介绍,就是可以设置默认的环境,也就是当只使用mina deploy用的环境。

# config/deploy.rb
set :stages, %w(staging production)
set :default_stage, 'staging'

另外,现在我们是只有两个环境,如果需要更多的,那只要在config/deploy目录下多新建文件就好了。

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
我的微信官网服务号精品文章订阅号微信视频号
程序员随风
统计信息
    学员: 22744
    视频数量: 1492
    文章数量: 466

© 汕尾市求知科技有限公司 | 专业版网站 | 关于我们 | 在线学员:1151

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top