7
votes

RAILS Facultative GEM Config

Que faites-vous lorsque vous souhaitez utiliser un joyau pour développer / tester que vous ne souhaitez pas forcer d'autres devs à utiliser? À l'heure actuelle, j'ai xxx

dans test_helper.rb et aucune configuration de gemme, mais cela ressemble à une approche maladroite, bien que fonctionnelle. J'aimerais faire quelque chose comme ce qui suit: xxx

toute autre suggestion? Ou devrais-je simplement fournir ces jolis gemmes superficielles ...?

Modifier

Pour être clair, je ne parle que de ces gemmes spécifiques, comme Redgreen , qui ne sont pas réellement utilisés dans le code fonctionnel, mais uniquement dans le processus de codage . Il n'est pas nécessaire de les fournir du tout, sauf pour éviter les besoins conditionnels.


0 commentaires

7 Réponses :


0
votes

Si vous voulez que ce soit facultatif, il vaut mieux geler le gemme comme plugin. Cependant, ce n'est pas une bonne idée d'utiliser des pierres précieuses différentes que le reste d'une équipe de développement, car elle crée certaines incohérences dans le codeBase qui peuvent être difficiles à parcourir plus tard. Je dirais l'ajouter à config.gem et dis dire aux autres développeurs de faire: xxx

et vous avez terminé.


3 commentaires

Comment utiliser Redgreen conduirait-il à des incohérences dans la base de code? Je pense vraiment à penser aux benchmarkers, à la sortie du sucre, etc., pas d'outils de codage. Évidemment, le code que vous utilisez doit être spécifié et / ou congelé.


Je pense que, quelles que soient les pierres précieuses que vous utilisez, l'ensemble de l'équipe de DEV devrait avoir la même suite, afin de garantir que les insectes et les problèmes soient constat entre toutes les plateformes. Par exemple, j'ai utilisé NewRelic RPM sur un projet et cela a provoqué des bogues que personne d'autre n'a rencontré.


Je ne vois pas vraiment comment il s'agit d'une solution pour que les gemmes soient nécessaires pour travailler avec Bundler



0
votes

Voici comment j'ai abordé le même problème sous Rails 3.1. Dans mon gemfile: xxx

créer un fichier dans ./ TMP / (ou dans un dossier dans votre fichier .gitignore) de votre choix. J'ai utilisé eric_dev_gems . Cela devrait être ignoré par GIT et n'existera que sur votre système, à moins que l'un de vos coéquipiers ne décide qu'il souhaite également créer ce fichier.


3 commentaires

J'ai découvert cette méthode peut être ennuyeuse parce que mon gemfile.lock sera toujours différent des collègues. Il y a aussi un gotcha: quand nous avons déployé à Heroku, je ne pouvais pas pousser mes changements à cause de la différence gemfile.lock. Dans ce cas, je viens de renommé le fichier, Ran Bundle installer , puis repoussé (et renommé le fichier en arrière). Il est possible de faire un script pour le faire pour moi, mais je vais chercher une solution plus propre.


Pourquoi énumérez-vous WIREBLE, WIRB, HIRB, ... dans votre gemfile? Pourquoi ne pas simplement les installer localement ou dans le gemsset? Il n'y a pas de dépendance pour le code, ce n'est que votre machine de développement (et seulement votre) qui en a besoin.


J'ai essayé d'les installer au gemsset. Ils ne sont pas disponibles pour Rails Server et Console de rails , comme les deux sont exécutés avec Bundle Exec - Corrigez-moi si je me trompe, bien que



1
votes

OK, je pense que je suis arrivé avec quelque chose. Fondamentalement, l'idée est de n'exécuter qu'un gemfile secondaire lorsqu'une application Rails est en cours d'exécution. Pour ce faire, nous ajoutons deux choses:

Premièrement, nous modifions le script de rails un peu: xxx

second, nous disons que le Bundler est de tirer dans le gemfile secondaire si nous " Re dans une application Rails et un fichier secondaire existent: xxx

maintenant Vous pouvez ajouter un gemfile.local à votre projet et exécuter des gemmes spécifiques sur un Base de la machine. Bundle installer fonctionne normalement depuis que le in_rails_app constante n'existe pas.

** Veillez à ajouter gemfile.Local à votre .gitignore.


7 commentaires

BTW, inspiration gemfile prise de: ici


Ceci est similaire à la solution que j'ai posté. Le problème avec les deux nos deux est que mon gemfile.lock est différent de celui de mes collègues. Tirant les changements de chacun signifie que nous devons faire Bundle installer . Il en va de même pour que nous appuyions tous les deux à Heroku (il rejette les pousses avec différents gemfile.lock ). J'ai fait un script pour m'occuper d'une partie de cela lors de la poussée des changements, mais idéalement, j'aimerais utiliser quelque chose d'un peu plus élégant


Upvote pour le lien mais bon de savoir que ce problème a été demandé ailleurs et n'a pas une solution simple et évidente


Le gemfile.lock ne serait pas différent avec cette solution depuis que Bundy Install ne traiterait pas du tout avec le gemfile local. Donc, tous les verrous seraient les mêmes sur toutes les machines, mais l'application Rails ne démarrerait pas sans les gemmes ajoutées au gemfile.Local (sur la machine locale)


HM, je viens de l'essayer et il n'a pas chargé les pierres précieuses pour moi. Tu as raison que gemfile.lock n'était pas affecté cependant: p


rails s permet à l'application de démarrer même si les gemmes de gemfile.local ne sont pas installées?


Je ne l'ai testé que par rails C , mais je suppose que cela aurait le même lock-out.



1
votes

Dans mes opinions, c'est ce que sont les environnements. Heureusement, il y a aussi une façon de le faire avec ce qui est dans votre gemfile, c'est aussi la façon dont les rails l'utilisent: des groupes

Utilisez à peu près les environnements de la même manière les rails l'utilisent. Voici ce que vous pouvez trouver dans votre gemfile: xxx

et voici ce que vous pouvez trouver dans votre config / application.rb xxx

Tout ce que vous devriez faire, c'est changer les paramètres de votre environnement local et les autres travaillant avec vous ne serez pas affectés à moins qu'ils ne détiennent. Tout se fait engager et rien ne se perd.

Voici quelques liens: http://yehudakatz.com/2010/ 05/09 / The-How-and-Wow-of-Bundler-Groupes / http://gembondler.com/groups.html


0 commentaires

7
votes

Les gemmes spécifiques à votre environnement de développement doivent être installées dans votre gemme ou vos gemmes locales, mais pas dans le gemfile .

Un exemple classique est le ruby-débog-base19x quelle rubymine a besoin de débogage. Ceci est installé dans votre gemset local, mais pas dans le gemfile car tous les codeurs n'utilisent pas de rubymine.

[EDIT]

En effet, tout est exécuté Le contexte du paquet et des gemmes extérieures ne sont pas accessibles. Il existe des solutions de contournement en effet. La plupart d'entre eux sont sale :)

J'ai trouvé beaucoup de bonnes solutions dans ce Bundler Issue .

La solution la plus belle consistait à ajouter ceci à votre .irbrc : xxx < p> Si vous installez ensuite WIRELLE au gemset global gemset, il peut alors être trouvé. Source originale: https://gist.github.com/794915

J'espère que cela aide.


4 commentaires

C'est le comportement que je vois: 1. GEM Installez WIMBLE (installé sur le projet RVM Gemset). 2. Console de rails (Foulille non chargée) 3. Liste de gemmes (à partir de la console intégrée, enveloppé dans des backtstics - Foulin non affichés 4. Quitter et Liste de gemmes < / code> à partir de cli: filtre affiché. Peut-être que RVM peut être configuré pour éviter cela. Si vous pouvez comprendre que la prime est à vous


Je vois ce que tu veux dire. J'ai trouvé une solution de travail, j'espère que cela peut vous aider également.


Cela fonctionne pour moi. Je rencontre un problème spécifique à la CISR avec le gem wirb , mais qui pourrait être spécifique à la configuration. Je vais attendre les 24 dernières heures pour attribuer la prime, juste au cas où une solution très évidente super-propre apparaît.


Les groupes Bundler sont exactement ce dont nous avons besoin pour les dépendances de développement.



2
votes

J'ai répondu à une question similaire à ma propre question ici

​​ Bundler de niveau utilisateur Gemfile

Un moyen de faire cela consiste à créer des environnements différents: xxx

puis xxx


5 commentaires

Merci pour votre réponse. Cela ne changerait-il pas le gemfile.lock afin que je doive rejouer à nouveau avant de pousser?


Bonne question - oui il altère gemfile.lock. Mais je ne pense pas que c'est un problème. Par exemple, lorsque vous ajoutez RSPEC en mode test ajouté à la gemfile.lock, mais cela n'affecte pas prod


C'est un problème pour les utilisateurs de Heroku tels que moi-même, car gemfile.lock ne fait que répertorier toutes les gemmes que la machine dépend sans les séparer dans Dev / Production / Test. Heroku jette une erreur lorsque le téléchargement gemfile.lock ne correspond pas à sa version actuelle. Déploiement de ce sens signifie que je dois BUNDLE INSTALL -WITH-ENV = PRODUCTION à chaque fois avant de passer à la production et Bundle installer avant de pousser à notre Dev Repo (sinon mon Les collègues devraient BUNDLE INSTALL Après avoir tiré pour obtenir partagé Dev / Test gems dans gemfile.lock)


"L'utilisation du groupe" Test "dans ce cas vous permet de spécifier les gemmes nécessaires pour tester votre application. Puisque vous n'aurez pas besoin de ces gemmes en production, vous pouvez accélérer l'installation en ignorant le groupe" Test ". Bundler fournit Cette capacité à travers l'option: Bundout Installation - Sans test Vous pouvez actuellement accéder à cette fonctionnalité sur Heroku en définissant la configuration de Bundle_without Var dans votre application. "


L'option Heroku est une nouvelle pour moi, merci de partager cela. Le problème avec l'utilisation d'un groupe Bundler de tout type est qu'il modifie gemfile.lock , nécessitant plus de travail de moi ou de mes collègues pour partager nos modifications parmi les autres. Cela résout le problème de Heroku, cependant, merci d'avoir partagé cette information cependant, je suis sûr que cela aidera les autres personnes ayant des besoins différents.



0
votes

Je l'ai résolu en mettant cela dans mon fichier GEM: xxx

de cette façon, le gemme ne sera utilisé que si vous l'avez installé manuellement sur votre système.

Cela fonctionne bien mais a l'inconvénient qu'il met le nom de gemme dans le gemfile.lock. Ceci est de peu de conséquence parce que le gemme n'est pas installé avec Bundle installer mais il rend votre fichier de verrouillage un peu désordonné et que le fichier de verrouillage change un peu d'un développeur à la suivante. < / p>

Si c'est un problème pour vous une autre option consiste à conserver le gemfile propre et besoin de la gemme de son chemin complet, ou vous pouvez ajouter le chemin pour simplement ce gemme. Comme ceci: xxx


0 commentaires