Spécification de la version des rails à utiliser lors de la création d'une nouvelle application


227

J'ai deux versions de rails (2.1.0 et 2.2.2) installées sur mon ordinateur.

Lorsque je crée une nouvelle application, est-il possible de spécifier que je souhaite utiliser l'ancienne version (2.1.0)?


Réponses:


503

J'ai trouvé ici une option non documentée pour créer une nouvelle application en utilisant une ancienne version de Rails.

rails _2.1.0_ new myapp 

1
Vous devez changer cela en réponse acceptée car cela fonctionne pour Rails 2 et 3. La réponse de Keltia ne fonctionnera plus si vous avez Rails 3 installé et que vous voulez une application Rails 2.
Peter Brown

Il est erroné que l'installation de Rails 3 échoue pour 2.3.5 - vient d'être testé sur Mac OS X Snow Leopard avec ces modules installés: rails (3.0.5, 2.3.5, 2.2.2, 1.2.6)
Mike

13
Il s'agit de la fonctionnalité RubyGems, pas de la fonctionnalité Rails; il ne dépend donc pas de la version de Rails et fonctionnera pour d'autres gemmes. (Merci, c'est une excellente réponse!)
Calrion

2
Je reçois une erreur lors de l'utilisation de 3.1.3 lorsque 3.1.3 et 3.2.0.rc1 sont installés. Voici l'erreur --- [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

Très utile maintenant que 4.0.0 est sorti!
Jason


26

J'avais du mal à utiliser rails _version_ new application_name (le projet résultant était toujours généré pour la dernière version de Rails installée.)

Après avoir creusé un peu, j'ai trouvé un article de Michael Trojanek avec une approche alternative. Cela fonctionne en créant un dossier avec un Gemfile spécifiant la version souhaitée de Rails puis en l'utilisant bundle exec rails...pour que Bundler se charge d'exécuter la version appropriée de rails. Par exemple, pour créer un nouveau projet Rails 4.2.9, les étapes sont les suivantes:

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

Je ne pense pas que cela soit nécessaire bundle update, cela mettra également à jour les rails !!
Rajkaran Mishra

@devel bundle updateest nécessaire car une mise à jour manuelle est utilisée ( --skip-bundle). Les rails ne seront pas mis à niveau car une version spécifique est spécifiée dans le Gemfile (4.2.9 dans l'exemple.)
mikej

--forceécrase le Gemfile
Rajkaran Mishra

Oui, mais le nouveau Gemfile qui est écrit spécifie toujours la version de Rails que nous voulions (car a bundle exec rails new...exécuté la version de railsspécifié dans le Gemfile qui finit par être remplacée.)
mikej

1
Je l'ai fait gem 'rails', '5.0.0.1' >> Gemfileet après avoir exécuté l' bundle exec rails newoption --force, c'est gem 'rails', '~> 5.0.0', '>= 5.0.0.1'dans Gemfile. Maintenant, quand je cours bundle update, sa mise à jour des rails à 5.0.4 (dans Gemfile.lock), mais je m'attendais à utiliser la version 5.0.0.1 des rails
Rajkaran Mishra

9

Comme indiqué à juste titre par @mikej for Rails 5.0.0 ou supérieur , vous devez suivre ces étapes:

Créez un répertoire pour votre application avec un Gemfile pour spécifier la version souhaitée de Rails et laissez bundler installer les gemmes dépendantes:

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

Vérifiez que la bonne version des rails a été installée: $ bundle exec rails -v

Maintenant, créez votre application, laissez Rails créer un nouveau Gemfile (ou plutôt remplacez l'existant en utilisant l' --forceindicateur) et au lieu d'installer le bundle ( --skip-bundle), mettez-le à jour manuellement:

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

Si vous vérifiez l'entrée des rails Gemfile, cela devrait ressembler à ceci:

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

Vous devez le mettre à jour vers la version exacte requise pour l'application:

gem 'rails', '5.0.0.1'

Maintenant, la dernière étape:

$ bundle update

3

Vous pouvez générer le squelette avec l'une ou l'autre version et exiger celle que vous souhaitez dans 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

ou utilisez la commande "rails" de la version que vous souhaitez de toute façon.


3

Vous devriez également jeter un oeil à "geler" vos gemmes Rails dans l'application. Cela aide beaucoup au déploiement, en particulier dans les environnements d'hébergement partagé.

Modifiez simplement la RAILS_GEM_VERSIONvariable config/environment.rbet lancez la tâche de gel de râteau:

rake rails:freeze:gems

use rvm use rubyversion
Apoorv

1

Il existe deux façons d'y parvenir:

un comme suggéré dans la réponse acceptée:

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

et une autre méthode consiste à créer un fichier gemme avec la version de rails souhaitée avant d'initialiser le projet de rails

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

J'ai écrit à ce sujet en détail dans mon article

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.