ठीक है, मुझे हाल ही में इसका कुछ अनुभव मिला है। ऐसा लगता है कि इस समस्या को हल करने के कुछ तरीके हैं। सबसे पहले, आप यह निर्धारित कर सकते हैं कि वास्तव में रिमोट निष्पादन (कैपिस्ट्रानो के माध्यम से) क्या मेजबान बनाम बना हुआ है। ऐसा लगता है कि आपने कैपिस्ट्रानो रिमोट शैल के साथ ऐसा किया है:
$ 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 देखें।
में मदद मिलेगी यह मददगार था। मेरे मामले में, मुझे एक ऐसी समस्या थी जहां बंडलर पाया गया था, लेकिन 'बंडल निष्पादन रेक' चलाने पर भी रेक नहीं था। मैंने पर्यावरण के लिए एक छोटा सा संशोधन किया जो इस तरह दिखता था: सेट: default_environment, { 'पथ' => "/ opt/ruby-ee/bin: $ pATH" } –
मैंने इन तकनीकों को आजमाया और एक ही त्रुटि प्राप्त की फिर भी। कोई अन्य विकल्प? – Paul
यह ध्यान देने योग्य हो सकता है कि उबंटू अब .bashrc स्क्रिप्ट में प्रारंभिक निकास डालता है, इसलिए यदि आप अंत में पथ चर जोड़ रहे हैं तो यह आपके पर्यावरण को लोड नहीं कर रहा है। आप फ़ाइल की शुरुआत में पर्यावरण चर जोड़ने की कोशिश कर सकते हैं – Macdiesel