2012-09-10 6 views
10

किसी कारण Capistrano हर आपरेशन के बारे में पर विफल हो रहा है के लिए, क्योंकि यह सोचने के लिए मेरे current_path/u/apps/ में होना चाहिए लगता है। मैंने सभी चर सेट किए हैं (AFAIK) को सेट किया जाना चाहिए, और अन्य सभी समान डिफ़ॉल्ट पथों को हटा दिया जाना चाहिए, लेकिन यह एक बनी हुई है।क्यों Capistrano उपयोग कर रहा है/u/apps/current_path में, भले ही मैं निर्धारित किया है: deploy_to

यहाँ ऐसे प्रासंगिक चर द्वारा लौटाए गए हैं:

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/" 
+2

इसका एक और संभावित कारण यह है कि वर्तमान_पैथ deploy_to से पहले पढ़ा जाता है। उदाहरण के लिए, मेरे पास एक सेट था: sidekiq_pid, "# {current_path} /tmp/pids/sidekiq.pid" deploy_to से पहले आह्वान किया जा रहा है जो उत्पादन.आरबी फ़ाइल में था, इस प्रकार इसे डिफ़ॉल्ट/यू/ऐप्स में डिफॉल्ट कर दिया गया। – JohnMerlino

+0

@JohnMerlino द्वारा उपरोक्त टिप्पणी मेरे लिए जवाब था। सबसे आसान समाधान, आपके कोड में करने के लिए सबसे आसान 'गलती'। ओकम के शेवर का कहना है कि यह जवाब है :-) – LpLrich

उत्तर

6

kludgey समाधान की तरह बस के लिए मैन्युअल रूप

set :current_path, "" 

better solution, which can be found explained in this e-mail thread by Jamis Buck himself, आलसी मूल्यांकन का उपयोग करने के लिए जब आप एक और चर कि current_path पर निर्भर करता है की स्थापना की है। मेरे मामले में, मैं इस

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

की तरह एक स्थापित करने के लिए कुछ है कि मैं कुछ इस तरह करने के लिए बदलना पड़ा था:

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

एक ब्लॉक में उत्तीर्ण होकर,: some_path_var तुरंत मूल्यांकन नहीं किया गया था, और

2

के लिए डिफ़ॉल्ट मान के आधार पर current_path को मूल्यांकन करने के लिए मजबूर नहीं किया गया था इसलिए मुझे यह समस्या भी थी और मैंने पाया कि यह सबसे अच्छा समाधान था।

अपने 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 मणि का स्रोत देख रही है और

lib/capistrano/recipes/deploy.rb

1

यह भी कर सकते हैं में

_cset(:current_path) { File.join(deploy_to, current_dir) खोजने से विचार आया अगर आप अपने कैप कमांड में कोई कार्य निर्दिष्ट नहीं करते हैं तो होता है। deploy_to:

cap deploy:setup 

/यू/क्षुधा

cap production deploy:setup 

में Capistrano स्थापित करने के लिए निर्देशिका में निर्दिष्ट में Capistrano स्थापित करेगा प्रयास करेंगे।

+0

यह केवल तभी सच है जब मल्टीस्टेज प्लगइन लोड हो। –