2015年5月28日木曜日

Capistrano で環境ごとに設定値を分ける手法

概要

Capistrano3ではcapコマンド実行時に環境を指定する必要があります
レシピ内で環境ごとに設定した値を参照する方法を紹介します
また今回紹介する方法以外にも様々な方法があるのであくまで参考程度に御覧ください

環境

  • CentOS 6.6 64bit
  • Capistrano 3.4.0

環境ごとの設定を記載する

cap installを使って初期設定をするとconfig/deploy/production.rbconfig/deploy/staging.rbというファイルができます
これに設定ごとの値を設定します

例えば以下の設定をそれぞれのファイルに記載してください

  • config/deploy/production.rb
set :env, "prd"
  • config/deploy/staging.rb
set :env, "stg"

「:env」というシンボルに値をsetします
この :env をレシピ側受け取って処理してみます

レシピ側で値を取得する

Capistranoのレシピは「lib/capistrano/tasks/sample.rake」に作成しているものとします
例えばあるレシピ上でシンボルを取得するには以下のようにします

namespace :test do

  desc 'this is test task'
  task :do_test do
    on roles :all do
      puts fetch(:env)
    end
  end

end

見ていただければ一目瞭然ですが、fetchというメソッドをタスク内で使用することで値を取得できます
以下のように書くことも可能です

puts "#{fetch(:env)}"

変数展開の形でも記載できます

こんな感じでconfig用のruby側で必要な値をsetしてそれをレシピ側でfetchするのが簡単です
そもそもsetするときにJsonから読み取ってsetするなんてこともできると思います

参考サイト

0 件のコメント:

コメントを投稿