#author("2016-04-19T15:25:18+09:00","default:wikiwriter","wikiwriter") #author("2022-02-19T09:50:46+00:00","default:src128","src128") [[Capistrano3]] &tag(Capistrano3/基本); *目次 [#jcea429d] #contents *関連ページ [#a11381d7] -[[Capistrano3]] *参考情報 [#ed5d69c6] *基本的な使用方法[#v40b5c7b] 以下bundle経由で使用する方法を説明する。 **V2からの移行 [#bbc60870] -互換性がないので作りなおさないといけない。 -GemfileをCapistrano3用に変更し、 -Capfile、config/deploy.rbを削除し、 -以下のインストール移行の手順を実行する。 **設定値の違い [#sdbc9dc6] -:repositoryが:repo_urlに。 -ssh_optionsの指定方法が。 ** インストール [#tebcad30] -Gemfileを編集し以下を追加。基本は"capistrano"だけだが、railsの処理を行ったり、rbenvの処理を行ったり、bundleを実行したりする場合追加のgemが必要となる。 #pre{{ group :deployment do gem 'capistrano' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-bundler' end }} -gemのインストール bundle install --path vendor/bundle **設定ファイルの作成 [#adc54f37] -プロジェクトフォルダに移動し、「cap install」を実行 #pre{{ $ cd myproject $ bundle exec cap install mkdir -p config/deploy create config/deploy.rb create config/deploy/staging.rb create config/deploy/production.rb mkdir -p lib/capistrano/tasks Capified }} **設定ファイルの編集 [#d28259dc] ***Capfile [#sb5ee752] -Capfileでは使用するモジュールをrequireする。他のファイルでrequireしてもうまくいかなかったりするの注意。 #pre{{ # 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 # # require 'capistrano/rvm' require 'capistrano/rbenv' # require 'capistrano/chruby' require 'capistrano/bundler' require 'capistrano/rails/assets' #require 'capistrano/rails/migrations' require 'capistrano/rails/migrations' # Loads custom tasks from `lib/capistrano/tasks' if you have any defined. Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r } }} ***config/deploy/staging.rbの編集 [#m5ee541e] -いきなり本番サーバーにdeployするのは危険性が高い。テスト用の環境にデプロイするためstaging.rbを準備する。 #pre{{ server 'centos6vm', user: 'tanaka', roles: %w{app db web}, my_property: :my_value role :app, %w{tanaka@centos6vm} role :web, %w{tanaka@centos6vm} role :db, %w{tanaka@centos6vm} }} ***config/deploy/production.rbの編集 [#s166c17f] -production環境に関する設定を行う。role、server、ssh_optionsの設定あたり。 ***config/deploy.rbの編集 [#mb74ff23] -デプロイに関する共通設定を記述する。以下は後述するcopy_to_deployを実行する設定。 -デプロイだけだとデバッグが大変なのでリモートで"ls"を実行する「list」タスクを定義しておくと便利。 #pre{{ set :application, 'demoapp' set :rbenv_ruby, File.read('.ruby-version').strip set :scm, :copy set :tar_roles, :web set :exclude_dir, ['vendor/bundle'] set :bundle_flags, '--quiet' task :list do on roles(:web) do execute "ls" end end namespace :deploy do namespace :deploy do after :restart, :restart_passenger do on roles(:web), in: :groups, limit: 3, wait: 10 do within release_path do execute :touch, 'tmp/restart.txt' end end end after :finishing, 'deploy:restart_passenger' end end }} ** 使用する [#r43bb852] **listタスクの実行 [#l2ce8f89] -サーバー上で"ls"を実行するlistタスクを実行してみる bundle exec cap staging list **deployタスクの実行 [#u1750759] -サーバー上にdeployする bundle exec cap staging deploy **マイグレーション実行 [#t2b274c6] -Capfileを編集し以下を追加する require 'capistrano/rails/migrations' -[[Capistrano の db ロール - akishin999の日記:http://d.hatena.ne.jp/akishin999/20140516/1400251748]]によるとroleで:db指定がないといけないような雰囲気だが特にかかなくてもdeployでマイグレーションが自動実行された。 -手動で実行する場合以下を呼ぶ bundle exec cap staging deploy:migrate **古いリリースの削除 [#i1ccd13e] -手動で削除する bundle exec cap deploy:cleanup -s keep_releases=3 -デプロイ後自動で削除する -deploy.rbに追加 #pre{{ set :keep_releases, 3 after :finishing, 'deploy:restart_passenger', 'deploy:cleanup' }}