Как установить переменную сервера на лету с помощью capistrano 3

мы пытаемся сделать наши сценарии развертывания как можно более универсальными. Возможно ли, чтобы 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"

Но когда я выполняю команду config:setup для запуска сценария конфигурации, я получаю сообщение об ошибке с запросом пароля. Если я жестко закодирую адрес сервера в файле production.rb, он отлично работает... как я могу решить эту проблему?

Спасибо


person user2099762    schedule 18.07.2015    source источник


Ответы (1)


Я надеюсь, что кто-то еще предложит более элегантное решение, но если нет:

В некоторых случаях я делал это с переменными окружения. Если вы хотите, вы также можете использовать Makefile для упрощения некоторых комбинаций env.

person will_in_wi    schedule 18.07.2015