rubyの経験は浅いのだけど、アプリケーションのデプロイにcapistrano(>= 3、デプロイ自動化ツール)を使うようにした。ちなみに以前のバージョン2は使ったことはない。。
タスクを管理する時に、タスクの外部から値を渡すにはaskというapiが用意されており、公式のドキュメントには以下のような例が掲載されている。
How can I get Capistrano to prompt for a password?
例えば、パスワードを外部から入力するソースコードは以下のようになる。askがQuestionクラスのオブジェクトを生成するだけで、実際の実行はfetchのタイミングで実行される。(なお、gemで提供されている最新のver3.2.1では、入力した文字がターミナルに表示されてしまうが、今後は、第3引数で、echo: false
とかオプション指定ができる?ようだ)
1 2 |
set :password, ask('password', nil) server "grepgrape", user: "grepgrape", password: fetch(:password), roles: %w{app} |
これをdeploy.bやstage用の設定ファイルで指定すれば、外部から値を入力してcapistranoに渡せる。しかし、これをタスクでないトップレベルに書いてしまうとcap -T
のようなタスク一覧を表示するコマンドにも影響してしまう。
そこで、このやり方が良いのかわからないが、以下のようにrakeの-Tオプション指定の有無を確認することで通常のタスク実行に一応影響せず実行できそうだった。
1 2 3 4 |
unless Rake.application.options.show_tasks set :password, ask("Server pass:", nil) server "grepgrape", user: "grepgrape", password: fetch(:password), roles: %w{app} end |
コメント