2011-11-21 10 views
16

Mam pewne problemy z moją konfiguracją capistrano po aktualizacji moich klejnotów ostatnio. Mam wieloetapową konfigurację z konfiguracją produkcji i inscenizacji.Capistrano Multistage wdrażanie do niewłaściwego katalogu

/config/deploy.rb

# setup multistage 
set :stages, %w(testing production) 
set :default_stage, "testing" 
require 'capistrano/ext/multistage' 

/config/deploy/production.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/live" 
set :rails_env, "production" 

/config/deploy/testing.rb

# Set deploy path 
set :deploy_to, "/var/www/mysite/test" 
set :rails_env, "test" 

Problem jest to, że wydaje się zignorować moje ustawienie deploy_to. Po prostu wdraża domyślne/u/apps/mysite.

Nie wiem, czy ma to jakiekolwiek znaczenie, przyczyną tego wszystkiego jest przejście od apache + pasażera do nginx + jednorożca. Nie sądzę, że ma to coś wspólnego, ponieważ jest to tylko proces realizacji transakcji.

+1

Musi być jakiś sposób, aby to zrobić bez powielania konfiguracja na każdym etapie. Pomysły? – thekingoftruth

+0

Odpowiedz na pytanie za pomocą rozwiązania i zaakceptuj je, aby było wyświetlane jako odpowiedź. – mrbrdo

Odpowiedz

0

I w końcu rozwiązać ten przez dodanie następujących do mojego deploy/production.rb i testing.rb

set(:deploy_to)   { "/var/www/#{application}/live" } 
set(:releases_path)  { File.join(deploy_to, version_dir) } 
set(:shared_path)  { File.join(deploy_to, shared_dir) } 
set(:current_path)  { File.join(deploy_to, current_dir) } 
set(:release_path)  { File.join(releases_path, release_name) } 
0

Gdzie są te production.rb i testing.rb znajdujące się w projekcie?

Upewnij się, że są pod config/deploy.

+0

Tak, są w /config/deploy/production.rb & testing.rb –

+0

spróbuj wymagać "capistrano/ext/multistage" przed ustawieniem etapów – kain

+0

Spróbowałbym również użyć zestawu: deploy_to, "/ mypath/# { stage} "w głównym deploy.rb – kain

9

Natknąłem się na to podczas przepełnienia stosu. Jest to stare pytanie, ale odkąd jest oznaczony jako otwarty, zamierzam go postrzelić.

Myślę, że to może być problem z zasięgiem, w jaki sposób ładowane są instancje Capistrano.

zauważam składnia ta nie działa w production.rb i test.rb plików

set :deploy_to, "/var/www/mysite/live" 

Ale to się robi:

set(:deploy_to) { "/var/www/#{application}/live" } 

Jej subtelna różnica, ale myślę, że jeden to działa przekazując informacje jako blok Proc, podczas gdy pierwszy przekazuje go jako ciąg znaków. Mam podstępne podejrzenie, że do czasu powstania Instancji Capistrano ten sznur nie jest już obecny.

To wskazywałoby, że coś jest wyłączone z obciążenia lub wymaga zamówienia, ponieważ powinieneś być w stanie ustawić zmienne wdrażania w tych plikach. Jeżeli nie można ustalić to może być w stanie oszukać i otaczają deploy/production.rb lub wdrożyć/test.rb kod z

Capistrano::Configuration.instance.load do 
    # variables, etc here 
end 

To na pewno powiedzieć, że ten plik nie jest ładowany w zasięgu instancji Capistrano.

także niewielki punkt, ale pliki powinny być w

config/deploy # relative to your Rails app 

Not

/config/deploy/ # this is an absolute path off of your root folder 

powodzenia. Mam nadzieję, że już rozwiązałeś ten problem!

+2

'set (: deploy_to) {"/var/www/# {application}/live "}' nie działa z capistrano 3.x. Dostaję następujący komunikat 'zła liczba argumentów (1 na 2)' – czerasz

+0

Cap 3 jest kompletnym IIRC do przepisywania API, próbują oczyścić starszą bazę kodu. Ta składnia będzie działać poprawnie w 2 jednak ... :) – engineerDave

-4

Może to być po prostu kolejność, którą masz w swoim deploy.rb? umieścić wymagają powyżej scenografii

require 'capistrano/ext/multistage' 

# setup multistage 
set :stages, %w(testing production) 
set :default_stage, "testing" 
+4

Jak wyjaśniono na oficjalnej stronie [wiki page] (https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension) dla wielostopniowego rozszerzenia , 'require' ** must ** pochodzą po dwóch' set'. – asymmetric

Powiązane problemy