如何使用capistrano 3动态设置服务器变量

时间:2015-07-18 05:58:30

标签: capistrano3

我们正在努力使我们的部署脚本尽可能通用。是否可以为服务器地址提供capistrano 3提示,而不是在配置文件中设置它。

到目前为止,我有一个

的capistrao任务
namespace :config do
  task :setup do
    ask(:db_user, 'db_user')
    ask(:db_pass, 'db_pass')
    ask(:db_name, 'db_name')
    ask(:db_host, 'db_host')
    ask(:application, 'application')
    ask(:web_server, 'server')
    setup_config = <<-EOF
#{fetch(:rails_env)}:
  adapter: postgresql
  database: #{fetch(:db_name)}
  username: #{fetch(:db_user)}
  password: #{fetch(:db_pass)}
  host: #{fetch(:db_host)}
    EOF
    on roles(:app) do
      execute "mkdir -p #{shared_path}/config"
      upload! StringIO.new(setup_config), "#          {shared_path}/config/database.yml"
        end
      end
    end

在我的production.rb文件中我有

set :application, "#{fetch(:application)}"
set :server_name, "#{fetch(:application)}.#{fetch(:server)}"
set :app_port, "80"

但是当我进行封装生产配置时:设置运行配置脚本我收到一个错误,要求我输入密码。如果我硬编码生产.rb文件中的服务器地址,它工作正常......我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

我希望其他人提供更优雅的解决方案,但如果没有:

我在某些情况下使用环境变量完成了这项工作。如果需要,您还可以使用Makefile来简化某些env组合。