वर्तमान में, मैं अपनी रेल 4 परियोजना को तैनात करने की कोशिश करता हूंcapistrano के साथ। फिलहाल, सर्वर होस्ट के समान है, लेकिन विभिन्न उपयोगकर्ताओं का उपयोग किया जाता है। मुद्दा यह है कि कैपिस्ट्रानो एक ही समय में आरवीएम और स्थानीय चर को सही ढंग से लोड नहीं करता है। स्थानीय चर में सेट किया गया है /etc/profile.d/oracle.sh
set :default_shell, "bash -l"
set :rvm_ruby_string, "ruby-2.0.0-p0@rails4"
require "rvm/capistrano"
set :use_sudo: false
...
...
desc "tester"
task :tester, hosts: "localhost" do
run "echo $TNS_ADMIN"
run "ruby -v"
run "gem list"
end
यदि मैं इस सेटिंग का उपयोग करता हूं, तो मुझे यह मिलेगा:
echo $TNS_ADMIN --> "correct path"
ruby -v --> 2.0.0p195 (wrong version)
gem list --> 5 gems (wrong)
अगर मैं उपयोग नहीं करता set :default_shell, "bash -l"
, मुझे मिला:
echo $TNS_ADMIN --> "" (wrong)
ruby -v --> 2.0.0p0 (correct version)
gem list --> > 100 gems (correct)
अगर मैं उपयोग करता हूँ set :default_shell, :bash
, मुझे मिला:
echo $TNS_ADMIN --> "" (wrong)
ruby -v --> 1.9.3p194 (wrong version = ruby version of the system)
gem list --> > 5 gems (wrong)
अगर मैं उपयोग नहीं करता set :rvm_ruby_string
, मुझे दोनों लाइनों का उपयोग करने के समान गलत परिणाम मिलता है (set :default_shell, "bash -l"
तथा set :rvm_ruby_string, "..."
)
लेकिन मैं स्थानीय चर रखना चाहूंगा $TNS_ADMIN
सेट और सही रूबी / रत्न (2.0.0p0@rails साथ> 100 रत्न)। मुझसे क्या छूट गया?
उत्तर:
उत्तर № 1 के लिए 1पहली पंक्ति निकालें:
set :default_shell, "bash -l"
यह निष्क्रिय करता है rvm-capistrano
एकीकरण।
आप इसके साथ चर पढ़ सकते हैं:
run "source /etc/profile.d/oracle.sh; echo $TNS_ADMIN"