LoginSignup
22
23

More than 5 years have passed since last update.

Capistranoの使い方メモ

Last updated at Posted at 2017-02-16

デプロイ周りは苦手なので備忘録として残しておきます。Capistranoを用いたRailsアプリケーションのデプロイ方法のメモです。

詳しくは以下のページに細かく載っているので、それがちゃんと理解できれば問題ないと思います。

入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい

Capistrano3のデプロイフレームワークの使い方

Capistrano3におけるRailsのデプロイタスクの内部実装

Ruby初心者のCapistranoデプロイ入門

此処から先は上のリンクを踏まえた上での自分なりの理解です。

初期化

capistranoを使うときにはじめにやるコマンドは以下です。

$ bundle exec cap install

作られるファイルは以下です。

Capfile
config/deploy.rb
config/deploy/production.rb
config/deploy/staging.rb

Capfileにcapistranoのplugin等をrequireしていきます。deploy.rbには共通の設定を書き、production.rbやstaging.rbには各環境に特化した設定を書きます。

デフォルトのタスク

Capfile で、

require 'capistrano/deploy'

で読み込みを行っていれば、デフォルトでnamespaceがdeployのタスクが読み込まれます。

capistrano/deploy では capistrano/framework が読み込まれています。

capistrano/framework の実装を見ると細かいタスクの実装は定義されておらず、deployタスクで実行する順番が定義されているようです。

空のタスクを上書きすることにより、デプロイの設定の詳細を記述しています。

順番としては

  1. deploy:starting
    1. deploy:print_config_variables
    2. deploy:check
      1. deploy:check:directories
      2. deploy:check:linked_dirs
      3. deploy:check:make_linked_dirs
      4. deploy:check:linked_files
    3. deploy:set_previous_revision
  2. deploy:started
  3. deploy:updating
    1. deploy:set_current_revision
    2. deploy:symlink:shared
      1. deploy:symlink:linked_files
      2. deploy:symlink:linked_dirs
  4. deploy:updated
  5. deploy:publishing
    1. deploy:symlink:release
  6. deploy:published
  7. deploy:finishing
    1. deploy:cleanup_rollback
  8. deploy:finished
    1. deploy:log_revision

のような感じです。

デフォルトではRailsに関するタスクはないので、

require 'capistrano/rails'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'

で読み込むことでmigrationやassetsに関するタスクが追加されます。

設定を書く・タスクを書く

共通の設定を deploy.rb に書いていきます。

set を使用して固有の設定を書きます。

設定については公式のドキュメントを読むのが一番良いです。

Configuration

デフォルトのタスク意外にタスクを追加する際は、以下のように書いていきます。

namespace :hoge do
  task :fuga do
    # ...
  end
end
before 'deploy:starting', 'hoge:fuga'

上記のタスクは deploy:starting タスクの前に hoge:fuga タスクを実行するように書いています。 before はcapistranoのDSLで、第一引数で指定したタスクの前に第二引数のタスクを実行するというように使います。 before の他にも after があり、capistrano/deploy で読み込んだデフォルトのタスクにいろいろ追加していくことでデプロイのタスクを作り込んでいきます。

beforeafterを多用するとタスクの実行順序がわかりにくくなるため、タスクの上書きが行えるのであれば上書きで対応するのが良さそうです。

タスクの上書きは

Rake::Task["deploy:migrate"].clear_actions

のようにタスクをクリアします。Capistranoの2系列では同名のタスクは上書きできたようですが、3系列で仕様が変わったようです。

Overriding Capistrano tasks

実行する

設定やタスクが書き終えたら実行できるか dry-run で試します。

bundle exec cap デプロイする環境 実行するタスク オプション

$ bundle exec cap production deploy --trace --dry-run

--trace はタスクが出力されるオプションです。 --dry-run は実際に動かすかテストできるオプションです。

これでうまくタスクの実行を確認できれば一旦ステージングで試した後、プロダクションでも実行することが可能になると言えると思います。

22
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23