用户输入
在任务或配置过程中可能需要用户输入
# used in a configuration
ask(:database_name, "default_database_name")
# used in a task
desc "Ask about breakfast"
task :breakfast do
ask(:breakfast, "pancakes")
on roles(:all) do |h|
execute "echo \"$(whoami) wants #{fetch(:breakfast)} for breakfast!\""
end
end
当使用 ask
获取用户输入时,可以传递 echo: false
以防止显示输入。此选项应用于在部署运行期间询问用户密码和其他敏感数据。
ask(:database_password, 'default_password', echo: false)
作为参数传递的符号将作为文本显示给用户,输入将保存到此变量中
ask(:database_encoding, 'UTF-8')
# Please enter :database_encoding (UTF-8):
fetch(:database_encoding)
# => contains the user input (or the default)
# once the above line got executed
您可以使用 ask
设置服务器或角色特定的配置变量。
ask(:password, nil)
server 'example.com', user: 'ssh_user_name', port: 22, password: fetch(:password), roles: %w{web app db}
您也可以使用 prompt
选项显示您自己的消息
ask(:breakfast, "pancakes", prompt: "What's for breakfast?")
重要! ask
不会立即提示用户。问题会延迟到第一次使用 fetch
获取设置时才出现。这意味着你可以使用 ask
询问多个变量,但只有你的任务中实际使用的变量才会提示用户输入。