rails[7]:使用capistrano进行自动化部署

服务器的准备可以参考这里
本文使用的是capistrano进行自动化部署。
因为使用了RVM和passenger,所以需要添加下面三个gem到Gemfile

  gem 'capistrano-rails'
  gem 'capistrano-rvm'
  gem 'capistrano-passenger'

进行bundle后,运行cap install,自动生成部署需要的文件。
在Capfile里添加如下几行,必须在require "capistrano/deploy"之下

require 'capistrano/rails'
require 'capistrano/rvm'
require 'capistrano/passenger'

这个跟gem是对应的。
在config/deploy.rb文件里,进行设置

set :application, 'my_app_name'
set :repo_url, '[email protected]:me/my_repo.git'
append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'
set :default_env, { path: "/opt/ruby/bin:$PATH" }  #如果用了rvm,{}里面应该设置成rvm_bin_path: '~/.rvm/bin'

对于新的passenger,还需要增加下面三行

set :passenger_rvm_ruby_version, "2.3.1" #这里的ruby版本根据实际的版本指定
set :passenger_restart_with_sudo, true
set :passenger_restart_with_touch, true

修改config/deploy/production.rb

role :app, %w{deploy@ip}
role :web, %w{deploy@ip}
role :db,  %w{deploy@ip}

deploy是用户名,ip可以替换成域名。

通过cap production deploy可以进行部署了。
第一次部署,会遇到以下问题。
首先,要设置共享的文件。包括database.yml和secrets.yml
其次,如果使用mysql的话,需要手工运行bundle exec rails db:create -e production,生成数据库。
部署完毕。以后每次运行cap production deploy即可。

tips:如果需要secret_key_base的话,只要在本地运行rake secret就可以了。

如果使用的mysql数据库的话,需要手工执行一次创建数据库的操作。
跳到项目的根目录后,执行如下操作

bundle exec rake db:create RAILS_ENV=production

你可能感兴趣的:(rails[7]:使用capistrano进行自动化部署)