Почему 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.