Risposte:
Ho trovato qui un'opzione non documentata per creare una nuova applicazione utilizzando una versione precedente di Rails.
rails _2.1.0_ new myapp
_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> '
Ecco il comando che uso normalmente:
rails _version_ new application_name
per esempio rails _2.1.0_ new my_app
Ecco l'elenco di tutte le versioni di binari disponibili finora:
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
bundle update
, aggiornerà anche le guide !!
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.)
--force
sta sovrascrivendo il Gemfile
bundle exec rails new...
eseguiva la versione rails
specificata nel Gemfile che finisce per essere sostituita.)
gem 'rails', '5.0.0.1' >> Gemfile
e dopo aver eseguito bundle exec rails new
con 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
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 --force
flag) 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
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.
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_VERSION
variabile config/environment.rb
ed emettere l'attività di blocco del rake:
rake rails:freeze:gems
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