2012-09-10 8 views
10

Z jakiegoś powodu Capistrano nie działa poprawnie przy każdej operacji, ponieważ wydaje się, że mój current_path powinien być w /u/apps/. Ustawiłem wszystkie zmienne (AFAIK) i wyeliminowałem wszystkie inne podobne domyślne ścieżki, ale ta nadal się utrzymuje.Dlaczego Capistrano używa/u/apps/w ścieżce current_path, mimo że ustawiłem: deploy_to

Oto wartości zwracane przez odpowiednich zmiennych:

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 

mam ustawienie :deploy_to, więc nie current_path powinna być obliczana na podstawie tego !?

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

Inną potencjalną przyczyną tego jest sytuacja, gdy bieżący_poczt jest czytany przed wejściem deploy. Na przykład miałem zestaw: sidekiq_pid, "# {current_path} /tmp/pids/sidekiq.pid", który był wywoływany przed deploy_to, który był w pliku production.rb, powodując jego domyślne ustawienie/u/apps. – JohnMerlino

+0

Powyższa uwaga @JohnMerlino była dla mnie odpowiedzią. Najprostsze rozwiązanie, najłatwiejszy "błąd" w kodzie. Golarka Occam mówi, że to jest odpowiedź :-) – LpLrich

Odpowiedz

6

Rodzaj rozwiązania kludgey jest po prostu ręcznie

set :current_path, "" 

better solution, which can be found explained in this e-mail thread by Jamis Buck himself, jest stosowanie oceny leniwy po ustawieniu innej zmiennej, która zależy od current_path. W moim przypadku, miałem ustawienie się coś takiego

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

że musiałem zmienić na coś takiego:

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

Przekazując w bloku, wyrażenie: some_path_var nie został natychmiast ocenić i nie wymusiło oszacowania wartości current_path na podstawie wartości domyślnej dla :deploy_to

2

Tak więc miałem również ten problem i stwierdziłem, że jest to najlepsze rozwiązanie.

Dodaj to do swojej 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" 

mam pojęcia, patrząc na źródło gem Kapistrana i znalezienie

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

lib/capistrano/recipes/deploy.rb

1

Może to również się stanie, jeśli nie określisz zadania w poleceniu cap.

cap deploy:setup 

spróbuje skonfigurować Capistrano w/U/apps

cap production deploy:setup 

powoła Capistrano w katalogu określonym w: deploy_to.

+0

Jest to prawdą tylko w przypadku załadowania wtyczki wielostopniowej. –

Powiązane problemy