はいさい!沖縄支店の石原です。

10月も半ばを過ぎましたが、沖縄はいまだに半袖です。
過ごしやすくていいのですが、季節の変わり目をあまり感じられないのは残念ですね。

さて今回は、 前回 Capistrano に追加したタスクを外部ファイル化する方法を書きたいと思います。
よく使う関数を共通化しておくことで、複数の環境で実行したり、
別案件への移植を簡単に行うことができます。


 

まずは結論から

  1. 共通関数ファイルを作成する
  2. lib\capistrano\tasks に作成した共通関数ファイルを設置する
  3. 各環境用の.rbファイルで関数を呼び出す

1. 共通関数の作成

まずは、共通ファイルを作成します。
下記は、permissionを変更する関数となります。



namespaceをsample_funcとして設定し、 sample_func.rake として作成します。
develop、production環境によって異なる箇所は、呼び出し元で設定した変数を使用します。
上記のサンプルでは、 #{deploy_to} が変数にあたります。


2. 共通関数ファイルの設置
 
capistranoでは、独自タスクを格納するためのディレクトリが準備されています。
共通関数ファイルを作成したら、lib\capistrano\tasks にファイルを設置します。

 
 3. 環境設定ファイル側で関数を呼び出し

名前空間:メソッド名 の形式で各環境設定ファイルに追記すると、
tasksに設置した関数を実行することができます。

# 変数で対象ディレクトリを定義する
set :deploy_to, "ディレクトリのパス"

# デプロイ完了時に共通関数を呼び出す
after  'deploy:finishing', 'sample_func:chmod_write'
「実行タイミング, 関数」の形式で設定を行います。
今回のサンプルでは after 'deploy:finishing' としているため、デプロイが完了後に実行されます。


capistranoに準備されているタスクの一覧は cap -T で確認できるので
実行のタイミングについては調整してみてください。

コマンド実行結果を貼り付けておきます。
capistrano-task



普段Rubyを書き慣れていない と大変ですが、
適切なタイミングでタスクをフックできれば、運用コストが大きく削減できると思います。

書いてみると発見も多いので、ぜひ一度試してみてくださいね。