Capistrano3에서 rails를 deploy 해보십시오.
14893 단어 루비Capistrano
여러 서버에 소프트웨어 배포를 자동화할 수 있습니다.
rails를 대상으로 자주 사용되지만 rails 등의 프레임워크나 언어에 한하지 않고 배포할 수 있습니다.
현재 최신판은 3.0.1입니다. (2014/1/12 현재)
또한 Capistrano는 2에서 3으로 변경시 파라미터를 잡는 방법 등이 바뀌어 호환성이 없어지고 있습니다. 이번은 3 이후의 기술로 실시합니다.
공식 페이지
이번 환경
CentOS6.4
루비 2.1
rbenv
1. 설치
gem을 사용하여 capistrano를 설치합니다. root가 아닌 경우는
sudo
도 붙여 주세요.rails가 아니라면 capistrano-rails가 필요하지 않습니다.
gem install capistrano
gem install capistrano-rails
gem install capistrano-rbenv #またはcapistrano-rvm
bundler를 사용하는 경우 아래 설명을 Gemfile에 추가하여 bundler install을 실행하십시오.
gem 'capistrano', '~> 3.0.1'
gem 'capistrano-rails'
gem 'capistrano-bundler'
2. 설정 파일 작성
구성 파일을 만듭니다. rails의 루트 디렉토리에서 다음 명령을 실행하십시오.
cap install
이제 다음 파일이 생성됩니다.
railsルート
├─ Capfile
├─ config
│ ├─ deploy
│ │ ├─production.rb
│ │ └─staging.rb
│ └─deploy.rb
└─ lib
└─capistrano
└─tasks
3.Capfile 묘사
먼저 Capfile을 작성합니다.
초기에는 코멘트 아웃이 있으므로 필요한 것을 코멘트 아웃으로부터 제외합니다.
Capfile
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Includes tasks from other gems included in your Gemfile
#
# For documentation on these, see for example:
#
# https://github.com/capistrano/rvm
# https://github.com/capistrano/rbenv
# https://github.com/capistrano/chruby
# https://github.com/capistrano/bundler
# https://github.com/capistrano/rails/tree/master/assets
# https://github.com/capistrano/rails/tree/master/migrations
#
# require 'capistrano/rvm' #rvmならこちらを外す
require 'capistrano/rbenv' #rbenvならこちらを外す
set :rbenv_type, :system # or :system, depends on your rbenv setup
set :rbenv_ruby, '2.1.0' #rubyのバージョンを指定
# require 'capistrano/chruby'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
4.deploy/{환경}.rb 설명
deploy 폴더 아래에 production.rb나 staging 등이 초기입니다.
추가하고 싶다면 development.rb 등을 추가합니다.
development.rb
set :stage, :production #環境名
#各サーバの役割を記述
role :app, %w{[email protected]} #アプリケーションサーバ
role :web, %w{[email protected]} #webサーバ
role :db, %w{[email protected]} #DBサーバ
#サーバ情報記述
server 'example.com', #サーバ名
user: 'deploy', #実行ユーザ
roles: %w{web app db}, # サーバの役割
ssh_options: {
keys: %w(~/.ssh/xxxxx/private_key),
auth_methods: %w(publickey), # 認証方法 passwordも可能
#password: 'xxxxx' #password指定
}
4. 외부 파일에 작업 작성
deploy.rb의 외부 파일에 작업을 작성할 수 있습니다.
lib/capistrano/tasks 아래에 XXXX.cap 파일을 만듭니다.
이번에는 unicorn의 시작 작업 unicorn.rb로 작성하겠습니다.
unicorn.rb
namespace :unicorn do
task :environment do
set :unicorn_pid, "#{shared_path}/tmp/pids/unicorn.pid"
set :unicorn_config, "#{current_path}/config/unicorn/#{fetch(:rails_env)}/unicorn.rb"
end
def start_unicorn
within current_path do
execute :bundle, :exec, :unicorn_rails, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -p 8080 -D"
end
end
def stop_unicorn
execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})"
end
def reload_unicorn
execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})"
end
def force_stop_unicorn
execute :kill, "$(< #{fetch(:unicorn_pid)})"
end
desc "Start unicorn server"
task :start => :environment do
on roles(:app) do
start_unicorn
end
end
desc "Stop unicorn server gracefully"
task :stop => :environment do
on roles(:app) do
stop_unicorn
end
end
desc "Restart unicorn server gracefully"
task :restart => :environment do
on roles(:app) do
if test("[ -f #{fetch(:unicorn_pid)} ]")
reload_unicorn
else
start_unicorn
end
end
end
desc "Stop unicorn server immediately"
task :force_stop => :environment do
on roles(:app) do
force_stop_unicorn
end
end
end
5.deploy.rb 설명
deploy.rb에 배포시 작업을 설명합니다.
여기에서는 각 환경 공통의 처리, 변수를 기술합니다.
set :対象変数
에서 변수에 값을 설정합니다. 이 값은 fetch :対象変数
에서 사용할 수 있습니다.deploy.rb
#アプリケーション名
set :application,'test'
#レポジトリURL
set :repo_url, '[email protected]:xxxxxx/test.git'
#対象ブランチ masterに固定
set :branch, 'master'
#デプロイ先ディレクトリ フルパスで指定
set :deploy_to, '/var/www/test'
#バージョン管理方法 subverion, git, mercurial, cvs, bzrなど
set :scm, :git
#情報レベル info or debug
set :log_level, :debug
#sudoに必要 これをtrueにするとssh -tで実行される
set :pty, true
#sharedに入るものを指定
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets}
#capistrano用bundleするのに必要
set :default_env, { path: "/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH" }
#5回分のreleasesを保持する
set :keep_releases, 5
#タスク定義
namespace :deploy do #タスクnamespace
#desc 'タスク説明'
#task :restart do #タスク定義
#ここにタスク処理内容を記述
#end
#after :finishing, 'deploy:cleanup' #task実行タイミングを指定できます。詳細は下記
#http://capistranorb.com/documentation/getting-started/flow/
#サンプルにunicorn再起動タスク
desc 'Restart application'
task :restart do
invoke 'unicorn:restart' #lib/capustrano/tasks/unicorn.cap内処理を実行
end
after :finishing, 'deploy:cleanup'
end
6. 실행
실행합니다.
cap <対象環境名> deploy
그러면 대상 서버에 배포가 수행됩니다.
Capistrano는 실행하면 아래와 같은 배치가 됩니다.
railsルート
├─current #releases内最新のシンボリックリンク
├─ releases #配下に現在時刻に基づく名前のサブディレクトリが作成され最新コードがチェックアウトされる
└─ shared #リリース間で共用するファイルを置いておく
Reference
이 문제에 관하여(Capistrano3에서 rails를 deploy 해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ea54595/items/12ab7b3a8213b35cca10텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)