3 votes

Changement de versions de Rails avec RVM

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

Est-ce que mon ordinateur bascule automatiquement vers rails 2.1.1 lorsque je me déplace dans cette application avec la commande cd parce que rails 2.1.1 est spécifié dans le Gemfile? Ou est-ce que j'ai besoin de créer explicitement un gemset pour que mon application et mon ordinateur fonctionnent selon la logique de "rails 2.1.1" (au lieu de suivre la logique de "rails 5.0.0 qui est la version de rails dans mon gemset par défaut)?

Ma préoccupation est que si mon ordinateur pense que j'utilise rails 5.0.0 au lieu de rails 2.1.1 en développant dans l'application, les commandes rails telles que les générateurs pourraient créer des fichiers et effectuer des actions "à la manière de rails 5.0.0" plutôt que "à la manière de rails 2.1.1".

J'espère que ceci a du sens. Voici ce que je ferais pour indiquer de manière "explicite" 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 utilisant 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

Maintenant ce gemset utilise rails 2.1.1.

Maintenant, à la racine de mon application, je spécifie un fichier .ruby-gemset qui dit à rails : "Assurez-vous de faire les choses selon la façon de rails 2.1.1 et non selon la façon de rails 5.0.0 :

#.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 en développant dans cette application, tout se fera dans le contexte de la version de rails spécifiée dans le Gemfile plutôt que la version de rails dans le gemset par défaut.

2voto

Eric Wanchic Points 421

Il n'y a pas de problème avec RVM et Rails. Utiliser le Gemfile est, à mon avis, la meilleure façon de le faire ! Dans votre Gemfile, vous pouvez spécifier quelle version de ruby et quel gemset dans cette version de ruby à utiliser.

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

Tout d'abord, établissez que le ruby par défaut pour le système est 5.0.0. Cela permettra à tous les projets Rails nouveaux/existants de se baser sur cette version de ruby par défaut (sauf pour ceux qui ont une définition différente dans le Gemfile) :

rvm use --default 5.0.0

..et bien sûr, si vous voulez le fixer à un gemset spécifique :

rvm use --default 5.0.0@my_default_gemset

Définir Ruby/Gemset par défaut --pour une application Rails spécifique dans le Gemfile

Exemple 1

Si vous voulez 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 Gemfile, spécifiez juste en dessous de la ligne source les deux lignes commentées suivantes :

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

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

RVM a utilisé votre Gemfile pour choisir Ruby, tout va bien - Heroku fait 
la même chose, vous pouvez ignorer ces avertissements avec 'rvm rvmrc warning ignore 
/chemin/vers/votre/application/rails/Gemfile'.

Pour ignorer l'avertissement pour tous les fichiers, exécutez 'rvm rvmrc warning ignore
allGemfiles'.

Vous pouvez vé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 en 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 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, puis il basculera automatiquement vers rvm

Veuillez suivre le processus pour créer le fichier rvmrc.

Allez 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 fichier .ruby-version dans le dossier de votre projet et RVM basculera automatiquement vers le Ruby correct. Quelque chose comme ceci :

$ echo '2.1.1' > .ruby-version

Il vous suffit de vous assurer que cette version est installée, par exemple :

$ rvm install ruby-2.1.1

0voto

yeasayer Points 516

Tout d'abord, je recommande de ne pas utiliser le fichier .ruby-gemset, car le Gemfile a déjà tout ce dont vous aurez besoin. .ruby-version est également obsolète, car la version de Ruby peut être spécifiée à l'intérieur du Gemfile également :

source 'https://rubygems.org'

ruby '2.3.1'

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

Concernant les versions de Rails. Tant que vous exécutez les commandes avec bundle exec, les versions de ces commandes seront exactement celles indiquées dans le Gemfile.

Il y a aussi des scripts binstubs à l'intérieur du dossier bin/ des projets. Ils sont la manière la plus préférable d'exécuter des commandes, car ils sont généralement adaptés aux besoins du projet (par exemple, exécuter spring avec votre commande) et ils exécutent finalement bundle exec de toute façon.

Donc la façon de faire les choses correctement, est d'exécuter ./bin/rails, ce qui peut être fastidieux. C'est pourquoi je recommande d'utiliser des aides. Par exemple, le projet oh-my-zsh a un plugin rails prêt à l'emploi. Premières lignes (lisez 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 (par défaut pour Rails 5 et 4) et l'exécute à la place. Sinon, le script vérifie si script/rails existe (par défaut pour Rails 3) et script/server (par défaut pour Rails 2). Ainsi, vous avez toutes les versions couvertes. C'est la même chose pour rake.

Avec ce plugin, vous n'aurez jamais à vous soucier de commandes supplémentaires. Il vous suffit de toujours exécuter simplement rails. Installez-le une fois et oubliez-le.

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