Gemfile-da barcha toshlarni qanday yangilanishdan keyin saqlashim mumkin?

Mening savolim allaqachon bu yerda so'ralgan, lekin uning sabablarini tushunishga harakat qilaman buning o'rniga qanday qilib ishlash kerakligi haqida gap boradi.

Xatolik bor edi;

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)

Endi "mpapis-bundler" dan foydalanish kabi turli yechimlarga ega bo'ldim, yoki "bundle exec" uchun stenograf yaratish uchun, lekin men bu narsa

$bundle install --binstubs

uchun edi.

Ayniqsa, mening gemfilimda rspec-rails uchun hech qanday versiya raqamlari bo'lmaganligi sababli, nima uchun bu mos kelmaslikim bor? Men xatolik yuz berganida ham xatolik yuz berdi

$rake db:migrate

menga buni ayt

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

Har qanday tushuntirishlar taqdir qilinadi.

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 javoblar

Bu sizning Rails ilovangizdan ko'ra tizimingizda so'nggi yangi toshlarni o'rnatganingizda sodir bo'ladi.

Bundler sizning Gemfile shtatlaringiz bilan bog'lanishingiz kerakligini aytadi.

Bu ishning maqsadi:

bundle exec rake db:migrate

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

Gemfile'dan qimmatbaho toshlarni yangilash bilan bog'liq holda:

bundle update

Bunday zerikarli narsalardan qochishning eng oson usuli, gemsets yaratib, toshlaringizni ajratishdir. Men bu maqsad uchun RVMdan foydalanaman.

34
qo'shib qo'ydi
Sizda alohida gemset bormi? Sizda .rvmrc faylini yuklash kerakmi? siz butun dunyo getset bo'sh?
qo'shib qo'ydi muallif apneadiving, manba
1. gemset dan foydalaning: rvm gemset foo dan foydalaning. 2. O'z ichida toshlarni: tillar ro'yxati
qo'shib qo'ydi muallif apneadiving, manba
Men, albatta, rvm yordamida, va menda gemset bor. Ushbu xatolik so'ng "annotatsiya" marvaridini yangilashni xohlaganimda "$ paketli yangilash" ni ishga tushirdim (menda mavjud bo'lgan versiya Rails 3.1 bilan mos emas edi). Men "$ paketli yangilash" bilan ishlayotgan Gemfile.lock dagi hamma toshlarni yangilab turadigan va menda hech qanday versiya raqamlari bo'lmaganligi sababli ularni yangilab turadi. Men rspec hamma ni tegishli toshlarni mos keladiganlarga yangilashini kutgandim. Men noto'g'ri ekansiz?
qo'shib qo'ydi muallif Theo Scholiadis, manba
Mening gemsetni yuklagan .rvmrc faylim bor. Men global miqyosda toshlar o'rnatmaganman. Buni qanday tekshiraman?
qo'shib qo'ydi muallif Theo Scholiadis, manba
Rahmat. Global gemset bo'sh. Men o'zimni bo'shatib qo'yganimni esladim, shunda men o'zimning relslarimning apparatida faqat toshlar borligiga ishonch hosil qildim.
qo'shib qo'ydi muallif Theo Scholiadis, manba
Mening ishimda gem ro'yxatini tuzganimda (0.9.2.2, 0.9.2). Men toshlarni olib tashlash bilan birga 0.9.2.2 ni olib tashlashni istamayman. Mening gemset-dan 0.9.2.2 ni olib tashlashning bir usuli bormi?
qo'shib qo'ydi muallif c3rin, manba

Rake versiyasi 0.9.2.2 ga binoan, ikkala usul ham loyiha uchun yangi gemset hosil qiladi va sizning Gemfile-ga muvofiq tiyib versiyasini saqlaydi.

Misol uchun, 0.9.2 va 0.9.2.2 versiyalarini o'z ichiga olgan ikkita tuproqli toshlar mavjud bo'lsa, o'rnatilsa-da, "0.9.2" guruch versiyasini ko'rsatib, ammo hech qanday vazifani bajarishdan tashqari,

'Siz allaqachon 0.9.2.2 tirajni faollashtirgandingiz, ammo Gemfile uchun tirbandlik 0.9.2 talab qilinadi. Bundle execdan foydalanish bu muammoni hal qilishi mumkin. '

Gemfile.lock tilidagi versiyani blokirovka qilish va shovqinni 0.9.2 ni tanlash uchun paketni o'rnatishni kutmoqdaman, lekin bu shablonga ko'rinadi, bu yerda standart rake 0.9.2.2 yoqilgan.

Reyslar kitobi bilan tezkor veb-ishlab chiqishdan to'plamni o'rnatishni eslatib turadigan bo'lsak,

'Bundle o'rnatish Gemfile.lockni boshlang'ich nuqtasi sifatida ishlatadi va faqatgina o'rnatiladi Ushbu faylda ko'rsatilgan turli xil toshlar versiyalari. Shuning uchun ham shunday Bu fayl sizning versiyani nazorat qilish tizimiga tekshiriladi sizning hamkasblaringiz va tarqatish maqsadlaringizdan foydalanishini ta'minlaydi bir xil konfiguratsiya. '

lekin u bunday ishlamaydi,

Yaxshiroq 0.9.2.2 va 0.9.2 tirnog'ini olib tashlash yoki Gemfile.lock-dagi tirbandlik versiyasini 0.9.2.2 ga yangilashni ta'minlaydigan to'plamni yangilash rake-dan foydalanish yaxshiroqdir.

1
qo'shib qo'ydi
Adolatli. Lekin, nima uchun u barcha kerakli toshlar avtomatik ravishda yangilanmadi, shuning uchun Gemfile'da ushbu versiya uchun versiya raqamlari yo'q. Bu barcha holatlar uchun emas, balki muayyan muammo uchun yaxshi echimdir.
qo'shib qo'ydi muallif Theo Scholiadis, manba

@Apneadiving'in ta'kidlashicha, "$ bundle install" ishlayotgani sizning barcha to'plamlarni yangilaydi. Ammo, "$ bundle install --binstubs" ni ishga tushirgandan so'ng "bundle exec" qismini qoldirmasam ham, men mos kelmaydigan toshlar uchun xatolarga duch keldim.

Keyin yana bir marvarid qo'shganimdan keyin Gemfile-ni yangilab turishim kerak edi va endi ular ishlaydi. Men mos kelmasligi marvaridni yaratuvchilar tomonidan hal qilingan deb o'ylayman.

0
qo'shib qo'ydi