Specifica della versione delle rotaie da utilizzare durante la creazione di una nuova applicazione


Risposte:


503

Ho trovato qui un'opzione non documentata per creare una nuova applicazione utilizzando una versione precedente di Rails.

rails _2.1.0_ new myapp 

1
Dovresti cambiarlo con la risposta accettata poiché funziona per Rails 2 e 3. La risposta di Keltia non funzionerà più se hai Rails 3 installato e desideri un'app Rails 2.
Peter Brown,

Erroneo che avere Rails 3 installato non riesce per 2.3.5 - Appena testato su Mac OS X Snow Leopard con questi moduli installati: rotaie (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike,

13
Questa è la funzionalità RubyGems, non la funzionalità Rails; non dipende quindi dalla versione di Rails e funzionerà con altre gemme. (Grazie, questa è un'ottima risposta!)
Calrion,

2
Ottengo errori quando si utilizza 3.1.3 quando sono installati 3.1.3 e 3.2.0.rc1. Ecco l'errore --- [ninad @ localhost devel] $ rails _3.1.3_new sample_app /home/ninad/.rbenv/versions/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in bin_path': can't find gem railties (["3.1.3"]) with executable rails (Gem::GemNotFoundException) from /home/ninad/.rbenv/versions/1.9.2-p290/bin/rails:19:in <main> '
Ninad

Molto utile ora che 4.0.0 è uscito!
Jason,


26

Stavo riscontrando problemi nell'utilizzo rails _version_ new application_name(il progetto risultante era ancora generato per la versione più recente di Rails installata.)

Dopo un po 'di ricerche ho trovato un articolo di Michael Trojanek con un approccio alternativo. Funziona creando una cartella con un Gemfile specificando la versione desiderata di Rails e quindi usando in bundle exec rails...modo che Bundler si occupi dell'esecuzione della versione appropriata di rails. ad es. per realizzare un nuovo progetto Rails 4.2.9 i passaggi sono:

mkdir myapp
cd myapp
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '4.2.9'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle
bundle update

Non credo ce ne sia bisogno bundle update, aggiornerà anche le guide !!
Rajkaran Mishra,

@devel the bundle updateè necessario perché viene utilizzato un aggiornamento manuale ( --skip-bundle). Le rotaie non verranno aggiornate perché nel Gemfile è specificata una versione specifica (4.2.9 nell'esempio.)
mikej

--forcesta sovrascrivendo il Gemfile
Rajkaran Mishra il

Sì, ma il nuovo Gemfile che viene scritto specifica ancora la versione di Rails che volevamo (perché bundle exec rails new...eseguiva la versione railsspecificata nel Gemfile che finisce per essere sostituita.)
mikej

1
L'ho fatto gem 'rails', '5.0.0.1' >> Gemfilee dopo aver eseguito bundle exec rails newcon l'opzione --force, è gem 'rails', '~> 5.0.0', '>= 5.0.0.1'in Gemfile. Ora, quando corro bundle update, aggiorna i binari a 5.0.4 (in Gemfile.lock), ma mi aspettavo di usare i binari versione 5.0.0.1
Rajkaran Mishra,

9

Come giustamente sottolineato da @mikej per Rails 5.0.0 o versioni successive , dovresti seguire questi passaggi:

Crea una directory per la tua applicazione insieme a un Gemfile per specificare la versione Rails desiderata e consenti al bundler di installare le gemme dipendenti:

$ mkdir myapp
$ cd myapp
$ echo "source 'https://rubygems.org'" > Gemfile
$ echo "gem 'rails', '5.0.0.1'" >> Gemfile
$ bundle install

Verificare che sia stata installata la versione corretta delle guide: $ bundle exec rails -v

Ora crea la tua applicazione, lascia che Rails crei un nuovo Gemfile (o piuttosto sovrascriva quello esistente usando il --forceflag) e invece di installare il bundle ( --skip-bundle) aggiornalo manualmente:

$ bundle exec rails new . --force --skip-bundle

Se controlli la voce per le rotaie Gemfile, dovrebbe essere così:

gem 'rails', '~> 5.0.0', '>= 5.0.0.1'

È necessario aggiornarlo alla versione esatta necessaria per l'applicazione:

gem 'rails', '5.0.0.1'

Ora, il passaggio finale:

$ bundle update

3

Puoi generare lo scheletro con entrambe le versioni e richiedere quello desiderato config/environment.rb:

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION

oppure usa il comando "rotaie" dalla versione che desideri comunque.


3

Dovresti anche dare un'occhiata al "congelamento" delle gemme Rails nell'app. Questo aiuta molto con la distribuzione, specialmente in ambienti di hosting condiviso.

Basta cambiare la RAILS_GEM_VERSIONvariabile config/environment.rbed emettere l'attività di blocco del rake:

rake rails:freeze:gems

usa rvm usa rubyversion
Apoorv

1

Ci sono due modi per raggiungere questo obiettivo:

uno come suggerito nella risposta accettata:

gem install rails -v 2.1.0 #only when the gem has not been installed in the desired ruby version you are using, so that you don't get error on next step
rails _2.1.0_ new my_app

e il metodo alternativo è quello di creare il file gemmile con la versione di rotaie desiderata prima di inizializzare il progetto di rotaie

mkdir my_app
cd my_app
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rails', '2.1.0'" >> Gemfile
bundle install

bundle exec rails new . --force --skip-bundle

Ne ho scritto in dettaglio nel mio articolo

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.