J'ai plusieurs projets en cours sur l'utilisation des différentes versions de Rails. J'ai un flux de travail (décrit ci-dessous) pour la création de projets à l'aide des versions spécifiques de rails, et en gardant les projets isolés les uns des autres. J'aimerais expérimenter avec d'autres flux de travail, en particulier, à l'aide de rbenv au lieu de RVM, mais il n'est pas clair comment le faire.
QUESTION: Quelle est la meilleure pratique pour la création de plusieurs rails des projets, chacun utilisant une autre version de rails, lors de l'utilisation de rbenv et bundler, par opposition à rbenv sertie ou rvm?
CAS d'UTILISATION: j'ai deux rails de projets, appelé ProjectA et Projetb. ProjectA est développé en utilisant une version de rails ("RailsA"), alors que Projetb utilise une version différente ("RailsB"). Comment puis-je gérer les avoir les deux versions?
LE GEMSETS APPROCHE: Lorsque j'ai commencé avec les Rails du développement, j'ai utilisé RVM. En plus de soutenir de multiples installations simultanées de ruby, RVM prise en charge de plusieurs Nommée Gem Jeux. Chaque projet a sa propre collection de bijoux (y compris les rails lui-même), appelé sertie:
rvm gemset create RailsA
rvm gemset use RailsA
# RailsA. Note: My question is not version-specific.
gem install rails --version 3.0
rails new ProjectA
cd ProjectA
rvm --rvmrc use `rvm current`
vi Gemfile
bundle install
cd ..
## Now do the same for ProjectB
rvm gemset create RailsB
rvm gemset use RailsB
gem install rails --version 3.2
rails new ProjectB
cd ProjectB
rvm --rvmrc use `rvm current`
vi Gemfile
bundle install
Remarque: La création des dossiers de projet doit être fait (à mon humble avis) par un rails new
commande à l'aide de la version souhaitée de rails, depuis les fichiers du squelette changement de version en version. (Peut-être que je devrais revoir cette prémisse?)
LE BUNDLER APPROCHE: j'ai joue avec l'aide de rbenv au lieu de RVM, mais je ne comprends pas le flux de travail aussi bien. Dans le fichier README.md, Sam Stephenson, écrit que "les rbenv ne ... gérer gemsets. Bundler est une meilleure façon de gérer les dépendances de l'application." Il y a un plugin (rbenv sertie) pour obtenir les mêmes résultats que rvm est gemsets, mais Sam clairement faveurs à l'aide de la Fagoteuse à la place. Malheureusement, il ne m'étendrai pas sur ce que le flux de travail devrait ressembler. Même le Bundler site web n'est pas explicitement connecter tous les points de façon à isoler un projet à partir d'un autre. Plusieurs blogs et gist venir à la rescousse, ce qui suggère la suivante ~/.bundle/config
le fichier:
---
BUNDLE_PATH: vendor/bundle
(BTW, je ne suis pas sûr de ce que l' "---" est d'environ. Les docs ne font aucune mention de celui-ci et il ne semble pas faire une différence.)
Effectivement cela donne à chaque rails de projet de sa propre sertie, le stockage des gemmes dans ProjectX/vendor/bundle/. En fait, rails lui-même sera (re-)y est installé, ce qui rend le projet complètement indépendant du reste de mon environnement, une fois que j'exécute bundle install
.
Mais l' éléphant dans la pièce est le dilemme de la poule et de l'oeuf problème de la création de l'rails dossier du projet dans la première place! Afin de créer le ProjectA dossier à l'aide de RailsA, j'ai besoin d'installer des rails (et ses nombreuses dépendances) d'abord. Mais lorsque je veux créer Projetb, je dois alors passer à l'utilisation de RailsB. Sans gemsets, je dois faire un peu de sérieux de valorisation/dévalorisation. Pas cool.
Une solution possible est tout simplement pas à se soucier de la version de rails-je utiliser pour créer le ProjectX dossier. Si je puis utiliser des rails 3.0 pour créer un 3.2 projet, je pourrais créer manuellement le dossier app/assets arbre. Mais cela ne m'irrite. N'est-ce pas là une meilleure façon?