2011-04-04 18 views
11

जब मैं cap deploy:update चलाता हूं तो मुझे नीचे त्रुटि मिलती है, यह दर्शाता है कि bundle नहीं मिला है। जब मैं cap shell से /var/lib/gems/1.9.1/bin पथ चलाता हूं जिसमें बंडल गुम है, हालांकि, यह पथ /etc/profile और ~/.bashrc दोनों में है। किसी को भी इस समस्या को हल करने के बारे में पता है?कैपिस्ट्रानो 'बंडल नहीं मिला' परिनियोजन के दौरान त्रुटि

[192.168.10.100] executing command 
*** [err :: 192.168.10.100] sh: 
*** [err :: 192.168.10.100] bundle: not found 
*** [err :: 192.168.10.100] 
    command finished in 25ms 
failed: "sh -c 'bundle install --gemfile /data/www/apps/my_app/releases/201104 
04163717/Gemfile --path /data/www/apps/my_apps/shared/bundle --deployment --qui 
et --without development test'" on 192.168.10.100 

उत्तर

1

क्या आपने मैन्युअल रूप से दूरस्थ बॉक्स पर bundler मणि स्थापित किया है? आप bundle कमांड का उपयोग नहीं कर सकते हैं या जब तक आप कोई बंडल इंस्टॉल नहीं कर सकते हैं।

1

क्या आप आरवीएम का उपयोग कर रहे हैं?

डेन कुछ संभव समाधान:

जगह

require "bundler/capistrano" 

बंडलर के रूप में अपनी स्क्रिप्ट में अब Capistrano के लिए समर्थन हासिल है https://github.com/carlhuda/bundler/blob/1-0-stable/lib/bundler/capistrano.rb

और शायद

before "deploy:cold", 
    "deploy:install_bundler" 

task :install_bundler, :roles => :app do 
    run "type -P bundle &>/dev/null || { gem install bundler --no-rdoc --no-ri; }" 
end 

install_bundler काम करेंगे केवल installe हो डी अगर नहीं मिला।

12

ठीक है, मुझे हाल ही में इसका कुछ अनुभव मिला है। ऐसा लगता है कि इस समस्या को हल करने के कुछ तरीके हैं। सबसे पहले, आप यह निर्धारित कर सकते हैं कि वास्तव में रिमोट निष्पादन (कैपिस्ट्रानो के माध्यम से) क्या मेजबान बनाम बना हुआ है। ऐसा लगता है कि आपने कैपिस्ट्रानो रिमोट शैल के साथ ऐसा किया है:

$ cap shell 
    > echo $PATH 

अच्छा। जब आप मशीन पर लॉगिन करते हैं और '$ $ PATH' गूंजते हैं, तो मैं शर्त लगाऊंगा, सही चीजें बाहर आती हैं ... यहां वही।

मुझे इसे ठीक करने के दो तरीके मिल गए हैं: एक दूरस्थ होस्ट के एसएसएच डिमन में पर्यावरण निष्पादन को सक्षम करना है। सिद्धांत रूप में यह काम करेगा, लेकिन अगर मैं इसे खोलना ठीक था तो मैं sysadmin से नहीं पूछना चाहता था। आप मूल रूप से 'PermitUserEnvironment' को 'yes' पर सेट करने के लिए एसएसएच कॉन्फ़िगरेशन फ़ाइलों को संपादित करते हैं और उपयोगकर्ता की ~/.ssh/पर्यावरण फ़ाइल को तैनात करने के लिए आवश्यक पर्यावरण सेटिंग्स जोड़ते हैं - आपके सिस्टम-विशिष्ट मैन पेज सामान्य रूप से सामान्य करने की कोशिश करने से बेहतर होते हैं ।

मैंने चुनौती दी कि क्या हैकिश लगता है, और इस बात की कमी है कि यह उन सभी होस्टों के लिए वैश्विक है, जिन्हें आप ऐप पर तैनात करते हैं (इसलिए यदि आपके रूबी/रत्न स्थान अलग-अलग मेजबानों पर अलग हैं, तो यह काम नहीं करेगा) - लेकिन: मैं config/deploy.rb स्क्रिप्ट के default_environment सेटिंग्स कहा:

set :default_environment, { 
    'PATH' => "/usr/local/bin:/bin:/usr/bin:/bin:/<ruby-dir>/bin", 
    'GEM_HOME' => '<ruby-dir>/lib/ruby/gems/1.8', 
    'GEM_PATH' => '<ruby-dir>lib/ruby/gems/1.8', 
    'BUNDLE_PATH' => '<ruby-dir>/lib/ruby/gems/1.8/gems' 
} 


AMMENDED: It isn't so 'hackish' if you consider the following: 
    - The environment-specific deploy scripts (deploy/foo.rb) can 
    override the default in deploy.rb 
    - PermitUserEnvironment hides the configuration deep in the 
    .ssh directory of the deploy user; :default_environment at 
    least exposes it in the checked-in sources. 

यह भी Capistrano के माध्यम से, दूरस्थ रेक कार्य, आदि करने के लिए सक्षम नहीं किया जा रहा की समस्या का हल। ध्यान रखें कि कैपिस्ट्रानो मणि, कम से कम मेरे पास संस्करण और "मानक" तरीके से स्थापित मेरे तैनाती के साथ, रत्न को/साझा/बंडल निर्देशिका में स्थापित करेगा, जो ऐप द्वारा उठाया जाता है। मेरे द्वारा वर्णित विधि को डिफ़ॉल्ट वातावरण द्वारा संदर्भित सिस्टम निर्देशिकाओं में रत्नों का न्यूनतम सबसेट की आवश्यकता होती है ताकि रिमोट कैपिस्ट्रानो आदेश बंडल, रेक, आदि निष्पादित कर सकें

आपने यह नहीं कहा कि आप RVM का उपयोग कर रहे थे (मेरा समाधान नहीं है); हालांकि, यह समाधान अनुशंसित आरवीएम समाधानों में से एक के बहुत करीब है। वैकल्पिक रूप से, आप केवल 'आरवीएम/कैपिस्ट्रानो' समाधान का उपयोग कर सकते हैं; अधिक जानकारी के लिए आरवीएम वेबसाइट पर RVM Capistrano integration देखें।

+0

में मदद मिलेगी यह मददगार था। मेरे मामले में, मुझे एक ऐसी समस्या थी जहां बंडलर पाया गया था, लेकिन 'बंडल निष्पादन रेक' चलाने पर भी रेक नहीं था। मैंने पर्यावरण के लिए एक छोटा सा संशोधन किया जो इस तरह दिखता था: सेट: default_environment, { 'पथ' => "/ opt/ruby-ee/bin: $ pATH" } –

+0

मैंने इन तकनीकों को आजमाया और एक ही त्रुटि प्राप्त की फिर भी। कोई अन्य विकल्प? – Paul

+0

यह ध्यान देने योग्य हो सकता है कि उबंटू अब .bashrc स्क्रिप्ट में प्रारंभिक निकास डालता है, इसलिए यदि आप अंत में पथ चर जोड़ रहे हैं तो यह आपके पर्यावरण को लोड नहीं कर रहा है। आप फ़ाइल की शुरुआत में पर्यावरण चर जोड़ने की कोशिश कर सकते हैं – Macdiesel

29

ऐसी समस्या से बचने के लिए आपके पास स्थानीय स्थानों पर और दूरस्थ सर्वर पर आरवीएम (वर्तमान में यह 1.13.5) के नवीनतम संस्करण स्थापित होना चाहिए।

इसके बाद, जांच लें कि आपका deploy.rb

require "rvm/capistrano" 
require "bundler/capistrano" 

है यह पंक्ति अब कोई आवश्यकता नहीं है:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 

आशा इस

+8

अपने जेमफाइल –

+0

पर 'मणि "आरवीएम-कैपिस्ट्रानो' 'जोड़ने के लिए मत भूलना मुझे बस" कार्य' तैनाती है: ठंडा 'मौजूद नहीं है "जब मैं 'आवश्यकता' आरवीएम/capistrano "' का उपयोग करें। हालांकि, 'कैपिस्ट्रानो' की आवश्यकता है "मेरे लिए काम करना प्रतीत होता है। – Snowcrash

संबंधित मुद्दे