रूबी-स्विच के बिना रूबी 2.0 स्थापित करें?


23

मैं नवीनतम Ubuntu 14.04 बल्कि निराशाजनक पर रूबी 2.0 स्थापित करने का कार्य ढूंढ रहा हूं। मुझे पता है कि मैं पैकेजों को वापस ले सकता हूं और स्रोत से स्थापित कर सकता हूं - लेकिन अगर मैं संभव है तो पैकेज को स्थापित करूंगा।

मुझे १३.१० को माणिक के बारे में यह प्रश्न / उत्तर मिला - जो मुझे जैसा चाहिए था वैसा ही दिखाई दिया।

माणिक कैसे स्थापित करें?

दुर्भाग्य से, रणनीति व्यवहार्य नहीं लगती है - 14.04 में रूबी-स्विच पैकेज को हटा दिया गया है।

http://www.ubuntuupdates.org/package/core/trusty/universe/base/ruby-switch

पैकेज का विलोपन एक बग को संदर्भित करता है, जो मेरे लिए, पूरी तरह से असंबंधित दिखता है।

मैं इस बारे में चिंतित हूं कि क्यों ruby2.0 को स्थापित करना apt-get installs ruby1.9 का उपयोग कर रहा है और इसे डिफ़ॉल्ट रूबी दुभाषिया बनाता है। मुझे एक रूबी 2.0 बाइनरी मिलती है - लेकिन स्क्रिप्ट (जो रूबी को निष्पादित करते समय 2.0 दुभाषिया पर निर्भर करती है) इसे नहीं उठाती हैं। इसके अलावा, जब मैं मणि एट का उपयोग करता हूं। अल। रूबी पैकेज स्थापित करने के लिए - ये 2.0 के बजाय रूबी 1.9 के लिए स्थापित किए जा रहे हैं। बहुत असंतोषजनक।

क्या कोई रूबी 2.0 को मानक रूबी दुभाषिया के रूप में स्थापित करने के लिए सबसे सरल तरीके के रूप में संकेत दे सकता है? मुझे रूबी-स्विच के बिना रूबी 1.9 से 2.0 तक स्विच करने की उम्मीद कैसे की जाती है?

जवाबों:


29

14.04 के लिए मुझे निम्नलिखित पीपीए मिले जो रूबी 2.x के साथ आते हैं

  • रूबी 2.1 को Ubuntu 14.04 में जोड़ता है

    sudo add-apt-repository ppa:brightbox/ruby-ng
    

मुझे 14.04 पर रूबी को स्थापित करने के लिए GoRails के निर्देशों का एक सेट मिला, लेकिन मुझे लगता है कि जब तक वे लंबे समय तक आप पीपीए चाहते हैं।

  • रूबी 1.9, 2.0 या 2.1 को Ubuntu 14.04 में जोड़ता है

    sudo add-apt-repository ppa:brightbox/ruby-ng-experimental
    

आप उनमें से एक को बस जोड़ने के बाद:

sudo apt-get update
sudo apt-get install ruby2.1 # In the case you want 2.1

6
क्या उबंटू 14.04 में रूबी 2.0 को स्थापित करने के लिए 'पर्सनल पैकेज आर्काइव' जोड़ना वास्तव में आवश्यक है - यह देखते हुए कि बिना "रूबी 02.0" के लिए एक पैकेज उपलब्ध है?
14

1
आपने सबसे सीधा रास्ता पूछा। यह ऐसा होगा, कम से कम जब तक रूबी का आधिकारिक 2.x संस्करण सॉफ़्टवेयर सेंटर पर या रूबी 2.0.x संस्करण के वास्तविक नंबर पर अपडेट नहीं हो जाता है, तब तक यह आपके द्वारा प्राप्त बग की तरह है।
लुइस अल्वाराडो

हम्म ... ubuntuupdates.org/package/core/trusty/main/base/ruby2.0 का सुझाव है कि 2.0 पहले से ही "मुख्य" भंडार में शामिल नहीं है?
aSteve

3
हां लेकिन जैसा कि आपने बताया कि यह 2.x शाखा नहीं बल्कि 1.9 है। इसलिए उन्हें इसे ठीक करना चाहिए।
लुइस अल्वारादो

2
ऐसा लगता है जैसे कि 2.0 और 1.9 दोनों व्याख्याकार मुख्य भंडार (एक अजीब निर्भरता के साथ) में हैं - लेकिन एक स्पष्ट कारण के लिए रूबी-स्विच को हटा दिया गया है।
असेवेट

8

रूबी का डेबियन संस्करण एक ही सिस्टम पर कई रूबी प्रतिष्ठानों का समर्थन नहीं करता है। डेबियन ने पैकेज का पालन किया और उबंटू ने इसे रिपॉजिटरी से हटा दिया । आपको rbenvविभिन्न रूबी संस्करणों के बीच स्विच करने के लिए उपयोग करना चाहिए । यह माणिक-स्विच पैकेज विवरण द्वारा अनुशंसित तरीका है और बग 737782 में पसंदीदा के रूप में चर्चा की गई विधि थी , इसके माध्यम से कहा गया है कि रिपॉजिटरी में माणिक के केवल एक से अधिक संस्करण नहीं होने चाहिए।

रूबी 2.0 ruby2.0पैकेज को स्थापित करते समय डिफ़ॉल्ट रूप से स्थापित किया जाता है और किसी अन्य कार्रवाई की आवश्यकता नहीं है। यदि पैकेज rubyस्थापित किया गया था तो इसे हटाने की सिफारिश की जाती है। आपके पास /usr/bin/ruby2.0आपके सिस्टम पर बाइनरी उपलब्ध होनी चाहिए ।


2
हम्म ... जब मैंने रूबी 2.0 पैकेज स्थापित किया, तो मुझे एक रूबी 2.0 निष्पादन योग्य और एक रूबी 1.9 निष्पादन योग्य मिला। मणि के साथ बातचीत करते समय, ruby1.9 सिस्टम रूबी संस्करण के रूप में माना जाने लगा। आगे की जांच पर, मुझे पता चला कि स्क्रिप्ट्स (रूबी 2.0 की आवश्यकता का दावा करते हुए) वास्तव में रूबी 1.9 के साथ ठीक चलती हैं - इसलिए मैंने रूबी 2.0 पैकेज को छोड़ दिया है। मैं केवल एक रूबी संस्करण चाहता था - यानी रनिंग 2.0 - लेकिन ubuntu 14.04 के पैकेजों ने इसकी अनुमति नहीं दी।
14

@ DeSteve डेबियन में मुझे लगता है कि समस्या नहीं है, उबंटू के माध्यम से उस पद्धति का उपयोग करता है। यदि आप चाहें, तो रूबी 2.0 के साथ रूबी 2.0 के लिए एक आभासी वातावरण बनाने की कोशिश करें, बस सुरक्षित पक्ष पर होने के लिए।
ब्रिअम

2
मैं निश्चित रूप से उसे देख रहा हूं, और इसका कोई मतलब नहीं है। onpt-get install ruby2.0 मुझे मिलता है: निम्नलिखित नए पैकेज स्थापित किए जाएंगे: libjs-jquery libruby1.9.1 libruby2.0 ruby ​​ruby1.9.1 ruby2.0 रूबीज-एकीकरण
जोश


1
@ जला नहीं, वास्तव में, डेबियन चुनती है कि रूबी के कई संस्करणों का समर्थन न करें , जैसा कि आप चैंज में देख सकते हैं । डेबियन का कहना है कि यह सिर्फ एक संस्करण का समर्थन करेगा और संस्करणों को स्विच करने के उपकरण किसी तरह टूट गए हैं, यही स्थिति डेबियन में कम या ज्यादा है। उबंटू ने उस समय 2.0 के लिए छलांग नहीं लगाने का फैसला किया।
ब्रिअम

8
sudo apt-get install ruby2.0
sudo rm /usr/bin/ruby && sudo ln -s /usr/bin/ruby2.0 /usr/bin/ruby
sudo rm -fr /usr/bin/gem && sudo ln -s /usr/bin/gem2.0 /usr/bin/gem

आप ln -fsअद्यतन को बल देने के लिए और हमेशा डरावना का उपयोग करने से बच सकते हैंrm -rf
njzk2

5

यदि आप माणिक के बीच स्विच करना चाहते हैं, तो मैं rvm ( https://rvm.io ) का उपयोग करने की सलाह देता हूं । यह एक पैकेज मैनेजर है और यह आपको एक मशीन पर कई अलग-अलग माणिक (न केवल मैट्स के) स्थापित करने की अनुमति देता है , या तो उपयोगकर्ता के लिए स्थानीय या वैश्विक रूप से सभी उपयोगकर्ताओं के लिए।

मुझे पता है कि आपने "पैकेज" के लिए कहा था, इसलिए शायद यह आपके लिए काम नहीं करेगा। लेकिन मुझे लगा कि अगर यह आपकी विकास मशीन है तो इससे मदद मिल सकती है।

इस तरह से करने का लाभ यह है कि आप 2.1.1 के लिए एक रत्न और 2.0 या 1.9.3 आदि के लिए अन्य को स्थापित कर सकते हैं। यह आपको अपने सिस्टम को कमिट किए बिना जुराब, रूबिनियस आदि का परीक्षण करने की भी अनुमति देता है।

मैं इसे उत्पादन पर उपयोग नहीं कर रहा हूं, लेकिन जाहिर तौर पर यह विकास के लिए भी उपयुक्त है।

यहाँ क्विकस्टार्ट: https://rvm.io/rvm/install है


1

खेल में देर से लेकिन मुझे लगता है कि हार्ड-कोडिंग सिम्बलिंक की तुलना में शायद एक और अधिक पूर्ण समाधान है, इस का उपयोग यह है कि update-alternativesयहां पर मौखिक रूप से पोस्ट किए जाने पर दूसरों को एक ही हताशा से काट दिया जाता है और एक अधिक देशी समाधान पसंद करेंगे। यह सभी बायनेरिज़ और मैन पेजों को संभालता है, पूर्वगामी रूप से संघर्षों से बचने के लिए पहले संदर्भों को हटाता है।

चेतावनियां:

  • मुझे लगता है कि अगर रूबी संस्करणों में से एक को अपडेट किया जाता है, तो इसे फिर से चलाने की आवश्यकता होगी।
  • मैं एक गुरु नहीं हूँ, update-alternativesइसलिए यह संभव है कि यह ओवरकिल और / या कील्डिंग किया जाए।

स्क्रिप्ट (मैंने नाम दिया fix-ruby-alternatives.sh):

#!/bin/bash

# Script to insert all potentially alternative-able files within ruby versioned packages
# Bill Evans ("r2evans")
# April 19, 2015

BIN=/usr/bin
MAN=/usr/share/man/man1
MASTER="ruby"
SLAVES=( gem irb rdoc testrb rake erb ri )
VERSIONS=( 1.9.1 2.0 )

DRYRUN="yes"
[[ "$1" = "-y" ]] && unset DRYRUN

PRI=0
for ver in ${VERSIONS[@]} ; do
    PRI=$(( ${PRI} + 1 ))
    REMCMD="update-alternatives --remove ${MASTER} ${BIN}/${MASTER}${ver}"
    CMD="update-alternatives --install ${BIN}/${MASTER} ${MASTER} ${BIN}/${MASTER}${ver} ${PRI}"
    if test -f "${MAN}/${MASTER}${ver}.1.gz" ; then
        CMD="${CMD}    --slave ${MAN}/${MASTER}.1.gz ${MASTER}.1.gz ${MAN}/${MASTER}${ver}.1.gz"
    else
        echo "#  no ${MAN}/${MASTER}${ver}.1.gz" > /dev/stderr
    fi
    for sl in ${SLAVES[@]} ; do
        if test -f "${BIN}/${sl}${ver}" ; then
            CMD="${CMD}    --slave ${BIN}/${sl} ${sl} ${BIN}/${sl}${ver}"
        else
            CMD="${CMD}    --slave ${BIN}/${sl} ${sl} /dev/null"
            echo "#  no ${BIN}/${sl}${ver}" > /dev/stderr
        fi
        if test -f "${MAN}/${sl}${ver}.1.gz" ; then
            CMD="${CMD}    --slave ${MAN}/${sl}.1.gz ${sl}.1.gz ${MAN}/${sl}${ver}.1.gz"
        else
            CMD="${CMD}    --slave ${MAN}/${sl}.1.gz ${sl}.1.gz /dev/null"
            echo "#  no ${MAN}/${sl}${ver}.1.gz" > /dev/stderr
        fi
    done

    if [[ -n ${DRYRUN} ]]; then
        echo -e ${REMCMD}
        echo -e ${CMD} | sed -e 's/\s* --slave/\n    --slave/g'
        echo "# Consider: update-alternatives --auto ruby"
    else
        ${REMCMD}
        ${CMD}
        echo "# Consider: update-alternatives --auto ruby"
    fi
done

IIRC का उपयोग करने के बजाय, आप केवल कॉल ${RECMD}और ${CMD}बिना उद्धरण के कर सकते हैं eval। दूसरे नोट पर: मैं "kludgingly" उधार लूंगा। :)
मूरू

सच ... यह एक जल्दबाजी में किया गया हैक था। फिक्स्ड। धन्यवाद :-)
r2evans
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.