Ruby 2.0'ı ruby-switch olmadan monte edin.


23

Yakut 2.0 yükleme Ubuntu 14.04 oldukça sinir bozucu yükleme görevi buluyorum. Paketleri bırakabileceğimi ve kaynaktan yükleyebileceğimin farkındayım - ama eğer mümkünse bir paket yüklemeyi tercih ederim.

İstediğim gibi görünen bu soruyu / cevabı 13.10'da buldum.

Yakut nasıl kurulur?

Ne yazık ki, strateji uygun görünmüyor - ruby-switch paketi 14.04'te silindi.

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

Paketin silinmesi, benim için tamamen alakasız görünen bir hatayı gösteriyor .

Neden ruby2.0 'u apt-get kullanarak kurarsam ruby1.9' u kurar ve onu varsayılan ruby ​​tercümanı yapar. Bir ruby2.0 binary'i alıyorum - fakat scriptler (ruby'yi çalıştırırken 2.0 yorumlayıcısına bağlı) almıyor. Ayrıca, gem et kullandığımda. ark. ruby paketlerini kurmak için - bunlar 2.0 yerine ruby1.9 için kurulmuş gibi görünüyor. Çok tatmin edici değil.

Yakut 2.0'ı standart yakut tercümanı olarak kurmanın en kolay yolu hakkında herhangi bir ipucu verebilir misiniz? Yakut anahtarı olmadan yakut 1.9'dan 2.0'a nasıl geçmem beklenir?

Yanıtlar:


29

14.04 için Ruby 2.x ile birlikte gelen aşağıdaki PPA'ları buldum.

  • Ruby 2.1'i Ubuntu 14.04'e ekler

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

GoRails’de Ruby’yi 14.04’e kurmak için bir dizi talimat da buldum, ancak uzun süredir PPA isteyeceğinizi tahmin ediyorum.

  • Ruby 1.9, 2.0 veya 2.1'i Ubuntu 14.04’e ekler

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

Bunlardan birini basitçe ekledikten sonra:

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

6
Ruby 2.0'ı Ubuntu 14.04'e yüklemek için bir 'Kişisel Paket Arşivi' eklemek gerçekten gerekli mi?
Steve

1
En basit yolu istediniz. Bu, en azından Ruby'nin 2.x sürümü Yazılım Merkezinde görünene kadar ya da Ruby 2.0.x sürümü gerçek sayıya gelene kadar ve sahip olduğunuz hatayı beğenmeyecek.
Luis Alvarado,

Hmm ... ubuntuupdates.org/package/core/trusty/main/base/ruby2.0 , 2.0'ın zaten "ana" depoya dahil edildiğini öne sürmüyor mu?
Steve

3
Evet, ancak bahsettiğiniz gibi 2.x dalı değil 1.9. Yani bunu düzeltmeliler.
Luis Alvarado

2
Hem 2.0 hem de 1.9 tercümanların ana depoda (garip bir bağımlılıkla) olduğu anlaşılıyor - ancak yakut-anahtar sahte bir nedenden dolayı silindi.
Steve

8

Ruby'nin Debian sürümü, aynı sistemde birkaç yakut kurulumunu desteklemiyor. Debian paketi iptal etti ve Ubuntu depolardan yeni çıkardı . rbenvFarklı yakut versiyonları arasında geçiş yapmak için kullanmalısınız . Bu, ruby-switch paket açıklamasıyla önerilen yöntemdir ve 737782 numaralı hatada tercih edilen şekilde tartışılan yöntemdi, depolarda birden fazla ruby ​​sürümünün olmaması gerektiği söyleniyordu.

ruby2.0Paket kurulurken Ruby 2.0 varsayılan olarak kurulur ve başka bir işlem yapmak gerekmez. Paket rubykuruluysa kaldırmanız önerilir. İkili /usr/bin/ruby2.0sisteminizde mevcut olması gerekir .


2
Hmmm ... ruby2.0 paketini kurduğumda ruby2.0 çalıştırılabilir ve ruby ​​1.9 çalıştırılabilir var. Gem ile etkileşime girdiğinde, ruby1.9'un sistem ruby ​​versiyonu olduğu varsayılmıştır. Daha fazla araştırmada, senaryoların (yakut 2.0'a ihtiyaç duyduğunu iddia ederken) gerçekten yakut 1.9 ile iyi çalıştığını keşfettim - bu yüzden yakut 2.0 paketini terk ettim. Sadece bir yakut versiyonunu istedim - yani runy 2.0 - ama ubuntu 14.04 paketleri buna izin vermedi.
Steve

@ASteve Debian'da ben bu problemi görmüyorum, Ubuntu aracılığıyla bu metodu kullanıyor. İsterseniz, sadece güvenli tarafta olmak için rbenv ile ruby ​​2.0 için sanal bir ortam oluşturmayı deneyin.
Braiam

2
Bunu kesinlikle görüyorum ve hiçbir anlamı yok. apt-get kurulumunda ruby2.0 alıyorum: Aşağıdaki YENİ paketler yüklenecek: libjs-jquery libruby1.9.1 libruby2.0 ruby ​​ruby1.9.1 ruby2.0 rubygems-entegrasyon
Josh Nankin


1
jla no, aslında, Debian , değişiklik gösterdiği gibi Ruby'nin birkaç versiyonunu desteklememeyi seçti . Debian, yalnızca bir sürümü destekleyeceğini ve sürüm değiştirmeye yarayan araçların bir şekilde bozulduğunu, bu Debian'daki durumun az ya da çok olduğunu söylüyor. Ubuntu o sırada 2.0 atmamaya karar verdi.
Braiam

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

Ayrıca ln -fsgüncellemeyi zorlayabilir ve her zaman korkutucu kullanmaktan kaçınabilirsinizrm -rf
njzk2

5

Yakutlar arasında geçiş yapmak istiyorsanız, rvm ( https://rvm.io ) kullanmanızı öneririz . Bu bir paket yöneticisidir ve bir kullanıcı için yerel olarak veya tüm kullanıcılar için global olarak bir makineye birçok farklı yakut (sadece Matz değil) kurmanıza olanak sağlar .

Bir "paket" istediğini biliyorum, belki de bu senin için işe yaramayacak. Ama bunun senin geliştirme makinen olmasının yardımı olacağını düşündüm.

Bu şekilde yapmanın faydası, 2.1.1 ve diğerini 2.0 veya 1.9.3 vb. İçin bir değerli taş takmanızdır. Ayrıca, sisteminizi birine bağlamadan jruby, rubinius vb.

Üretimde kullanmıyorum, ancak görünüşe göre gelişim için de uygun.

İşte hızlı başlangıç: https://rvm.io/rvm/install


1

Oyunun sonlarında ama sanırım sert kodlama semboliklerinden daha eksiksiz bir çözüm bu kullanımdan kaynaklanıyor update-alternatives, başkalarının da aynı sıkıntıdan dolayı ısırılması ve daha doğal bir çözüm istemek için burada ayrıntılı olarak yayınlandı. Bu, tüm ikili dosyaları ve man sayfalarını işler, çatışmaları önlemek için ilk önce referansları geçici olarak kaldırır.

Uyarılar:

  • Yakut versiyonlarından biri / güncellendiğinde bunun tekrar çalıştırılması gerektiğini düşünüyorum.
  • Ben guru değilim, update-alternativesbu yüzden bu overkill ve / veya yavaşça yapılabilir mümkün.

Komut Dosyası (adlandırdım 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 sadece arayabilir ${RECMD}ve ${CMD}kullanmak yerine, tırnak işaretleri olmadan eval. Başka bir not: "Kludgingly" ödünç alacağım. :)
muru

Doğru ... aceleci bir hack oldu. Sabit. Thanks :-)
r2evans
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.