服务器的准备可以参考这里
本文使用的是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, 'git@example.com: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
网友评论