Come si "attiva" una versione diversa di una particolare gemma?


85

Voglio passare da rails 2.3.10 come gemma "attiva" per il mio sistema operativo, in modo da poterlo invocare dalla riga di comando.

È possibile farlo? Non sto usando rvm. Forse è ora di iniziare.

Ho provato gem install rails --version=2.3.10, ma questo assicura solo che la versione della gemma sia installata, non la inserisce /usr/bin/rails.

(Uso già il bundler per le mie app, ma fino ad ora non avevo bisogno di alcun controllo preciso sulle gemme a livello di sistema operativo)

Risposte:


154

Se il tuo problema è eseguire i binari di una determinata versione, allora:

rails --version # => the latest version
rails _2.3.10_ --version # => Rails 2.3.10

Questo modello ( gem-binary _gem-version_) funziona per qualsiasi binario gemma.

Spero che sia d'aiuto.


1
Oh, questo mi ha appena risparmiato un lungo weekend in ufficio, grazie!
Lachlan McD.

2
Questo non sembra funzionare per tutti loro: rackup _1.4.3_ --version<br> Rack 1.1 (Release: 1.4)
Chloe

1
rackup stampa solo la versione di rilascio (vedere Rack.versione Rack.release github.com/rack/rack/blob/master/lib/rack.rb ). Prova gem install rack --version=1.3 && rackup _1.3.0_ --version, verrà stampatoRack 1.1 (Release: 1.3)
Daniel Vartanov

E per ogni evenienza, ecco come funziona:which rackup | xargs cat
Daniel Vartanov

12

Usa RVM

RVM ti consente di gestire diverse versioni di Ruby e Gems. Puoi installare una versione di ruby ​​usando, ad esempio

rvm install 1.9.2

Puoi quindi usarlo usando:

rvm use 1.9.2

Usa gemme specifiche per progetto con gemme.

Se vuoi ulteriore spaziatura dei nomi puoi impostare gemsets; directory che conterranno gemme specifiche per un progetto specifico.

rvm gemset create myproject

quindi puoi usarli in questo modo:

rvm use 1.9.2@myproject

Automazione

Per automatizzare il processo di cambio delle gemme, inserisci i file .ruby-version e .ruby-gemset nella root del tuo progetto. Apri la versione di Ruby e il nome del gemset che vuoi usare al loro interno e RVM selezionerà il gemset corretto quando fai il cd nella directory del tuo progetto.

Installazione di gemme nella tua gemma

Installa le tue gemme nel tuo gemset nel solito modo usando il bundler se lo stai usando:

bundle install

o semplicemente usando il vecchio normale:

gem install mygem

Le gemme andranno nella gemma giusta.

Alternative RVM

Potresti anche voler controllare rbenv, che fa un lavoro simile.


1
il problema con rvm è (come hai detto) che gestisce le versioni ruby ​​e gem. rbenv gestisce solo le versioni di ruby ​​e lascia che il bundler gestisca le versioni di gem.
daslicious

7

Puoi usare RVM

Quindi puoi anche utilizzare Bundler in seguito, che gestisce bene le dipendenze delle gemme.

Nel tuo Gemfile

gem "rails", "2.3.10"

e nella tua applicazione

require 'rubygems'
require 'bundler/setup'

e hai finito.


In aggiunta a questo, se si desidera che alcuni script a solo "vedere" le versioni dichiarate nel vostro Gemfile, eseguirli come "exec fascio <script-name>", ad esempiobundle exec warble
rustyx

3

EDIT: Ho appena visto la tua menzione RVM nel post. Sicuramente la strada da percorrere.

Dovrai installare RVM : è un pacchetto straordinario che ti consentirà di gestire diversi Ruby e diversi set di gemme sulla stessa macchina. Puoi passare avanti e indietro con totale facilità.

Ecco la guida all'installazione: http://rvm.beginrescueend.com/rvm/install/

Una volta che hai tutto alzato, puoi vedere tutti i tuoi rubys installati sulla riga di comando con con rvm liste passare con rvm use ruby-head, ad esempio. RVM tiene separate le gemme su ogni rubino, il che dovrebbe aiutare con la tua domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.