3 votes

RVM : changement de version de Rails

La situation est la suivante : mon gemset par défaut sur mon ordinateur pointe vers rails 5.0.0 . Cependant : j'ai une application qui utilise une très vieille version de rails. Disons que pour cet exemple, l'application utilise : rails 2.1.1 .

Mon appareil passe-t-il automatiquement en mode rails 2.1.1 quand cd'ed dans cette application parce que rails 2.1.1 est spécifié dans le Gemfile ? Ou : dois-je explicitement créer un gemset pour que mon application et ma machine fassent les choses à la "façon rails 2.1.1" (par opposition à la "façon rails 5.0.0" qui est la version de rails dans mon gemset par défaut) ?

Ce qui me préoccupe, c'est que si ma machine pense que j'utilise des rails 5.0.0 au lieu de rails 2.1.1 en développant à l'intérieur de l'application : alors les commandes rails telles que les générateurs peuvent créer des fichiers et faire des choses "à la manière rails 5.0.0" par opposition à la manière "rails 2.1.1".

J'espère que cela a du sens. Voici ce que je ferais pour déclarer "explicitement" via un Gemset que cette application utilise rails 2.1.1

Exemple :

Je crée un gemset qui doit être spécifié pour toute application qui utilise rails 2.1.1

rvm gemset create rails_2_1_1

Je spécifie la version de ruby à utiliser sur ce gemset

rvm use 2.2.1@rails_2_1_1

J'installe ensuite cette ancienne version de rails sur ce gemset :

gem install rails --version=2.1.1

Ce gemset utilise maintenant rails 2.1.1 .

À la racine de mon application, je spécifie un fichier .ruby-gemset qui indique à rails : "Assurez-vous que vous faites les choses que rails 2.1.1 et non pas la rails 5.0.0 manière :

#.ruby-gemset
rails_2_1_1

Je veux être sûr que si une autre version de rails est spécifiée dans le Gemfile d'une application que dans mon gemset par défaut : alors le développement dans cette application fera tout dans le contexte de la version de rails spécifiée dans le Gemfile par opposition à la version de rails dans le gemset par défaut.

2voto

Eric Wanchic Points 421

Ce n'est pas un problème avec RVM et Rails. L'utilisation du Gemfile est la meilleure façon de le faire, IMHO ! Dans votre Gemfile, vous pouvez spécifier quel ruby et quel gemset à l'intérieur de ce ruby utiliser.

Définir le système Ruby/Gemset par défaut

Tout d'abord, établissons que par défaut ruby pour le système sur 5.0.0 . Cela permettra à tous les projets Rails nouveaux/existants d'utiliser par défaut cette version de Ruby (à l'exception des projets qui utilisent le fichier Gemfile) :

rvm use --default 5.0.0

et bien sûr, si vous voulez qu'il soit fixé à un gemset spécifique :

rvm use --default 5.0.0@my_default_gemset

Définir la valeur par défaut de Ruby/Gemset -- pour une application spécifique à Rails dans le fichier Gemfile

Exemple 1

Si vous souhaitez configurer votre application rails pour utiliser le gemset RVM 2.2.1@rails_2_1_1 , similaire à la commande RVM ci-dessous...

rvm use 2.2.1@rails_2_1_1

Dans votre fichier Gemfile, spécifiez juste en dessous de l'élément source les deux lignes commentées suivantes :

source 'https://rubygems.org'
#ruby=2.2.1
#ruby-gemset=rails_2_1_1

Maintenant, lorsque vous cd dans le répertoire app de vos rails, vous devriez recevoir le message suivant, ou un message similaire :

RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does 
that too, you can ignore these warnings with 'rvm rvmrc warning ignore 
/my/rails/app/path/Gemfile'.

To ignore the warning for all files run 'rvm rvmrc warning ignore
allGemfiles'.

Vous pouvez revérifier vos résultats :

rvm list gemsets

   ruby-2.2.1 [ x86_64 ]
   ruby-2.2.1@global [ x86_64 ]
=> ruby-2.2.1@rails_2_1_1 [ x86_64 ]
   ruby-5.0.0 [ x86_64 ]
   ruby-5.0.0@global [ x86_64 ]

Exemple 2

Un autre exemple utilisant ruby-2.0.0-p247@rails-4.0.0 Exemple de commande RVM...

rvm use ruby-2.0.0-p247@rails-4.0.0

Dans votre fichier Gemfile, spécifiez :

#ruby=2.0.0-p247
#ruby-gemset=rails-4.0.0

1voto

Sonu Singh Points 164

Vous pouvez également créer un fichier rvmrc dans le répertoire de votre projet, il changera alors de rvm automatiquement.

Veuillez suivre la procédure de création du fichier rvmrc.

Aller dans le répertoire du projet

 rvm use 2.2.1@rails_2_1_1

 rvm --rvmrc --create 2.2.1@rails_2_1_1

Je pense que cela vous aiderait.

0voto

Vous pouvez créer un .ruby-version dans le dossier de votre projet et RVM passera automatiquement à la bonne version de Ruby. Quelque chose comme ceci :

$ echo '2.1.1' > .ruby-version

Vous devez simplement vous assurer que cette version est installée, par exemple :

$ rvm install ruby-2.1.1

0voto

yeasayer Points 516

Tout d'abord, je vous déconseille d'utiliser .ruby-gemset car Gemfile contient déjà tout ce dont vous avez besoin. .ruby-version est également obsolète, car la version de Ruby peut être spécifiée à l'intérieur de Gemfile également :

source 'https://rubygems.org'

ruby '2.3.1'

gem 'rails', '~> 4.2.7'
...

Maintenant, pour ce qui est des versions de Rails. Tant que vous exécutez des commandes avec bundle exec les versions de ces commandes seront exactement les mêmes que celles indiquées dans le document Gemfile .

Il existe également des binstubs scripts dans les projets bin/ dossier. C'est la meilleure façon d'exécuter des commandes, car elles sont généralement adaptées aux besoins du projet (par exemple, l'exécution de spring avec votre commande) et ils exécutent finalement bundle exec Quoi qu'il en soit.

La bonne façon de procéder est donc d'exécuter la commande ./bin/rails ce qui peut s'avérer fastidieux. C'est pourquoi je recommande d'utiliser des aides. C'est pourquoi je recommande d'utiliser des aides, oh-my-zsh est prêt à l'emploi rails plugin. Les premières lignes (lire ci-dessous pour l'explication) :

function _rails_command () {
  if [ -e "bin/rails" ]; then
    bin/rails $@
  elif [ -e "script/rails" ]; then
    ruby script/rails $@
  elif [ -e "script/server" ]; then
    ruby script/$@
  else
    command rails $@
  fi
}

function _rake_command () {
  if [ -e "bin/rake" ]; then
    bin/rake $@
  elif type bundle &> /dev/null && [ -e "Gemfile" ]; then
    bundle exec rake $@
  else
    command rake $@
  fi
}

alias rails='_rails_command'
compdef _rails_command=rails

alias rake='_rake_command'
compdef _rake_command=rake

Lorsque vous exécutez rails Ce script vérifie si bin/rails existe (Rails 5 et 4 par défaut) et l'exécute à la place. Si ce n'est pas le cas, script vérifie la présence de script/rails (Rails 3 par défaut) et script/server (Rails 2 par défaut). En gros, toutes les versions sont couvertes. Il en va de même pour rake .

Avec ce plugin, vous n'aurez plus à vous soucier des commandes supplémentaires. Il suffit de lancer rails . Il suffit de l'installer une fois et de l'oublier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X