世界上最伟大的投资就是投资自己的教育
部署之使用 mina 来部署 Ruby on Rails 应用之 mina-multistage (十一)
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
文件,把上面有的项删除掉,比如domain
,deploy_to
等,因为现在每个环境 (production, staging) 都各自有一套配置,所以不需要在config/deploy.rb
文件中指定。
下面来说一下 unicorn,unicorn 也是需要单独配置的,所以在config/deploy/production.rb
和config/deploy/staging.rb
文件中分别指定了unicorn_config
变量。
按照指定的位置,我们先创建config/unicorn
目录,然后复制之前的config/unicorn.rb
各一份,存成config/unicorn/staging.rb
和config/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
目录下多新建文件就好了。
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top