Почему Capistrano использует/u/apps/в текущем пути, хотя я и установил: deploy_to

По какой-то причине Capistrano терпит неудачу почти в каждой операции, потому что кажется, что мой current_path должен находиться в /u/apps/. Я установил все переменные, которые (AFAIK) должен быть установлен, и устранил все другие аналогичные пути по умолчанию, но этот сохраняется.

Вот значения, возвращаемые соответствующими переменными:

current_dir: current
releases_path: /var/www/vhosts/dev.www.example.com/html/releases
shared_path: /var/www/vhosts/dev.www.example.com/html/shared
current_path: /u/apps/www.example.com/current

Я устанавливаю :deploy_to, поэтому не следует вычислять current_path на основе этого!?

set :deploy_to, "/var/www/vhosts/dev.www.example.com/"

Ответ 1

Вид решения kludgey - это просто ручная

set :current_path, ""

Лучшее решение которое можно найти в этом потоке электронной почты самим Jamis Buck, заключается в использовании ленивой оценки, когда вы устанавливаете другую переменную, которая зависит от current_path. В моем случае у меня была настройка что-то вроде этого

set :some_path_var, "#{current_path}/some/path/"

что мне пришлось изменить на что-то вроде этого:

set(:some_path_var) { "#{current_path}/some/path/" }

Передача в блоке: some_path_var не была немедленно оценена и не принудительно оценивала значение current_path на основе значения по умолчанию для :deploy_to

Ответ 2

Итак, у меня была и эта проблема, и я обнаружил, что это лучшее решение.

Добавьте это в свой config/deploy.rb

  desc "Make sure the symlink will be from the right directory"
  task :change_correct_dir, roles: :web do
    set :current_path, File.join(deploy_to, current_dir)
  end
  before "deploy:create_symlink", "deploy:change_correct_dir"

У меня появилась идея взглянуть на источник драгоценного камня capistrano и найти

_cset(:current_path) { File.join(deploy_to, current_dir) в

lib/capistrano/recipes/deploy.rb

Ответ 3

Это также может произойти, если вы не укажете задачу в своей команде cap.

cap deploy:setup

Будет пытаться настроить Capistrano в /u/apps

cap production deploy:setup

Создает Capistrano в каталоге, указанном в: deploy_to.