Réponses:
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
_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> '
Voici la commande que j'utilise normalement:
rails _version_ new application_name
par exemple rails _2.1.0_ new my_app
Voici la liste de toutes les versions de rails disponibles à ce jour:
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
bundle update
, cela mettra également à jour les rails !!
bundle update
est 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.)
--force
écrase le Gemfile
bundle exec rails new...
exécuté la version de rails
spécifié dans le Gemfile qui finit par être remplacée.)
gem 'rails', '5.0.0.1' >> Gemfile
et après avoir exécuté l' bundle exec rails new
option --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
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' --force
indicateur) 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
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.
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_VERSION
variable config/environment.rb
et lancez la tâche de gel de râteau:
rake rails:freeze:gems
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