Hoe houd ik alle edelstenen in Gemfile compatibel na een update

Mijn vraag is al hier gesteld, maar ik probeer de redenen erachter te begrijpen in tegenstelling tot hoe je er omheen kunt werken.

De fout die ik kreeg was;

You have already activated rspec-core 2.7.1, but your Gemfile requires rspec-core 2.6.4. Using bundle exec may solve this. (Gem::LoadError)

Nu heb ik verschillende oplossingen gekregen, zoals het gebruik van "mpapis-bundler", of om een ​​afkorting te creëren voor "bundel-exec", maar ik had de indruk dat dat was

$bundle install --binstubs

was voor.

Meer specifiek, aangezien ik geen versienummers vermeld in mijn gemfile voor rspec-rails heb, waarom heb ik deze incompatibiliteit? Mijn fout deed zich ook voor toen ik het probeerde

$rake db:migrate

me dat vertellen

You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.9.2. Consider using bundle exec.

Alle uitleg wordt op prijs gesteld.

EDIT:
All my gems for my app are in a gemset, and I have updated my gems again. Should an update not make sure that related gems are compatible?

15

3 antwoord

Dit gebeurt wanneer u meer recente edelstenen in uw systeem installeert dan die in uw Rails-app.

Bundler vertelt u eenvoudigweg dat u zich moet houden aan die van uw Gemfile-staten.

Dit is het doel van hardlopen:

bundle exec rake db:migrate

-> running the very same rake version your Gemfile provides.

Betreffende het bijwerken van edelstenen uit gemfile, doe je gewoon:

bundle update

De eenvoudigste manier om dit soort saaie dingen te vermijden, is om je edelstenen te isoleren door edelstenen te maken. Ik gebruik RVM voor dit doel.

34
toegevoegd
heb je een speciale edelsteen? heb je een .rvmrc bestand dat het laadt? ben je wereldwijd gemset leeg?
toegevoegd de auteur apneadiving, de bron
1. gebruik de edelsteen die u wilt testen: rvm gemset foo gebruiken . 2. Maak een lijst van de edelstenen in: edelsteenlijst
toegevoegd de auteur apneadiving, de bron
Ik gebruik inderdaad rvm en ik heb een juweeltje. Deze fout is opgetreden na ik heb "$ bundelupdate" uitgevoerd omdat ik de "annotate" edelsteen wilde bijwerken (de versie die ik had was incompatibel met Rails 3.1). Ik had de indruk dat het uitvoeren van "$ bundelupdate" alle edelstenen in het Gemfile.lock zal updaten, en aangezien ik geen versienummers heb, zal het ze updaten naar het nieuwste. Ik verwachtte dat rspec alle relevante edelstenen zou bijwerken naar degenen die compatibel zijn. Heb ik het fout?
toegevoegd de auteur Theo Scholiadis, de bron
Ik heb een .rvmrc-bestand dat mijn juweel laadt. Ik heb geen edelstenen in de wereld geïnstalleerd. Hoe controleer ik dat?
toegevoegd de auteur Theo Scholiadis, de bron
Bedankt. De wereldwijde edelsteen is leeg. Ik herinner me dat ik het had geleegd, zodat ik ervoor zorgde dat ik alleen edelstenen had in de gemset van mijn rails-app.
toegevoegd de auteur Theo Scholiadis, de bron
In mijn geval als ik een edelsteenlijst maak, krijg ik rake (0.9.2.2, 0.9.2). Ik kan 0.9.2.2 niet verwijderen met gem uninstall rake. Is er een manier om 0.9.2.2 uit mijn gemset te verwijderen?
toegevoegd de auteur c3rin, de bron

Wat de rake-versie 0.9.2.2 betreft, is een van beide manieren om een ​​nieuwe edelsteen te maken voor het project en om de edelsteenversie die overeenkomt met uw Gemfile te behouden.

Als er bijvoorbeeld twee rake-edelstenen zijn met versies 0.9.2 en 0.9.2.2, specificeert het rake-versie '0.9.2' hoewel het wordt geïnstalleerd, maar voert het geen taken uit behalve het foutopsporen.

'Je hebt rake 0.9.2.2 al geactiveerd, maar je Gemfile heeft rake 0.9.2 nodig. Het gebruik van bundlexec kan dit oplossen. '

Ik verwacht dat de bundel-installatie de edelsteenversie vergrendelt in Gemfile.lock en de rake 0.9.2 kiest, maar het ziet er in de gemset uit, waar standaard rake 0.9.2.2 is ingeschakeld.

Even herinneren aan het doel van bundel-installatie van agile webontwikkeling met railsboek,

'bundle install gebruikt het Gemfile.lock als startpunt en installeert alleen de versies van de verschillende edelstenen zoals gespecificeerd in dit bestand. Om deze reden is het dat wel belangrijk dat dit bestand wordt gecontroleerd in uw versiebeheersysteem, als dit zorgt ervoor dat uw collega's en inzetdoelen allemaal het exact dezelfde configuratie. '

maar zo werkt het niet,

Het is beter om rake 0.9.2.2 te verwijderen en rake 0.9.2 te gebruiken of, gebruik bundelupdate rake, die de rake-versie in Gemfile.lock naar 0.9.2.2 update.

1
toegevoegd
Eerlijk genoeg. Ik vroeg me echter af waarom het niet automatisch alle vereiste edelstenen update, want ik heb om deze reden geen versienummers in het Gemfile. Dit is een goede oplossing voor het specifieke probleem, niet voor alle instanties.
toegevoegd de auteur Theo Scholiadis, de bron

Zoals @apneadiving al zei, werkt het uitvoeren van "$ bundle install" al je bunldes bij. Echter, na het uitvoeren van "$ bundle install --binstubs" kreeg ik nog steeds fouten voor incompatibele edelstenen wanneer ik het deel "bundel exec" wegliet.

Vervolgens moest ik mijn Gemfile bijwerken terwijl ik een nieuw juweel toevoeg, en nu werken ze. Ik ga ervan uit dat de onverenigbaarheden zijn opgelost door de makers van edelstenen.

0
toegevoegd