Capistrano3での外部入力値の引き渡し

rubyの経験は浅いのだけど、アプリケーションのデプロイにcapistrano(>= 3、デプロイ自動化ツール)を使うようにした。ちなみに以前のバージョン2は使ったことはない。。

タスクを管理する時に、タスクの外部から値を渡すにはaskというapiが用意されており、公式のドキュメントには以下のような例が掲載されている。

http://capistranorb.com/documentation/faq/how-can-i-get-capistrano-to-prompt-for-a-password/

例えば、パスワードを外部から入力するソースコードは以下のようになる。askがQuestionクラスのオブジェクトを生成するだけで、実際の実行はfetchのタイミングで実行される。(なお、gemで提供されている最新のver3.2.1では、入力した文字がターミナルに表示されてしまうが、今後は、第3引数で、echo: falseとかオプション指定ができる?ようだ)

set :password, ask('password', nil)
server "grepgrape", user: "grepgrape", password: fetch(:password), roles: %w{app}

これをdeploy.bやstage用の設定ファイルで指定すれば、外部から値を入力してcapistranoに渡せる。しかし、これをタスクでないトップレベルに書いてしまうとcap -Tのようなタスク一覧を表示するコマンドにも影響してしまう。

そこで、このやり方が良いのかわからないが、以下のようにrakeの-Tオプション指定の有無を確認することで通常のタスク実行に一応影響せず実行できそうだった。

unless Rake.application.options.show_tasks
set :password, ask("Server pass:", nil)
server "grepgrape", user: "grepgrape", password: fetch(:password), roles: %w{app}
end

byebyehaikikyou

日記やIT系関連のネタ、WordPressに関することなど様々な事柄を書き付けた雑記です。ITエンジニア経験があるのでプログラミングに関することなどが多いです。

シェアする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

コメントする