2017-04-17 44 views
0

我有一個Rails 4應用程序。前段時間,在運行bundle installbundle update後,我的應用程序開始出現問題。我發現法拉第寶石引起了一些問題,並且,由於其他一些寶石依賴於它,我無法卸載它。然後我發現我的項目備份來自我製作bundle install/bundle update命令之前。那時候我的應用程序運行良好。如何恢復安裝的gems和所有依賴版本,如舊Gemfile.lock

當比較我的舊Gemfile.lock和當前的Gemfile.lock時,我看到一些gem現在有更新的版本。我相信這是應用程序問題的原因。

這些僅僅是在我目前的Gemfile.lock的相關寶石:

oauth2 (1.3.1) 
     faraday (>= 0.8, < 0.12) 
     jwt (~> 1.0) 
     multi_json (~> 1.3) 
     multi_xml (~> 0.5) 
     rack (>= 1.2, < 3) 
    omniauth (1.4.2) 
     hashie (>= 1.2, < 4) 
     rack (>= 1.0, < 3) 
    omniauth-oauth2 (1.4.0) 
     oauth2 (~> 1.0) 
     omniauth (~> 1.2) 
    omniauth-yandex (0.0.2) 
     omniauth (~> 1.0) 
     omniauth-oauth2 (~> 1.0) 

我的老Gemfile.lock的從當應用程序很好工作:

oauth2 (1.3.0) 
    faraday (>= 0.8, < 0.11) 
    jwt (~> 1.0) 
    multi_json (~> 1.3) 
    multi_xml (~> 0.5) 
    rack (>= 1.2, < 3) 
omniauth (1.3.2) 
    hashie (>= 1.2, < 4) 
    rack (>= 1.0, < 3) 
omniauth-oauth2 (1.4.0) 
    oauth2 (~> 1.0) 
    omniauth (~> 1.2) 
omniauth-yandex (0.0.2) 
    omniauth (~> 1.0) 
    omniauth-oauth2 (~> 1.0 

我現在和以前的Gemfile是相同的:

gem 'tinymce-rails' 
gem 'mysql2', '~> 0.3.18' 
gem 'humanizer' 
gem 'globalize', '~> 4.0.3' 
gem "paperclip", "~> 4.2" 
gem 'remotipart', '~> 1.2' 
gem 'mailcatcher', '~> 0.6.1' ,  group: :development 
gem 'rufus-scheduler', '~> 3.1.2' 
gem "omniauth-yandex" 
gem 'friendly_id', '~> 5.1.0' 
gem 'devise' 
gem 'rest-client', '~> 1.8' 
gem "cocoon" 

是否有可能以某種方式降級一些寶石和將它們的依賴關係轉換爲舊的Gemfile.lock中的版本?

我的應用只需要omniauth-yandex寶石。

+1

剛剛更改的Gemfile版本規範所要求的版本爲您的應用程序,並再次運行'束install'。 Bundler將重新加載所需版本並調整Gemfile.lock文件。這在Bundler文檔中。 –

+0

@theTinMan \t感謝您的幫助。我添加了指定版本的所有gem,然後成功運行bundle update/install。但版本仍然沒有任何改變。這是爲什麼? – Edgars

回答

2

您應該嘗試在文件中添加寶石的特定版本。這樣,你將擁有一個特定的寶石所需的相關版本。

+0

感謝您的幫助。我添加了指定版本的所有gem,然後成功運行bundle update/install。但版本仍然沒有任何改變。這是爲什麼? – Edgars

+0

試試這個: 後更改版本的Gemfile,刪除Gemfile.lock的。然後運行「捆綁安裝」命令。 –

1

我用Rails應用程序面對過這幾次。由於這是您可能經常遇到的問題,因此我建議您確保使用某種類型的版本控制系統,例如Git。確保在安裝gem或更新Gemfile.lock(即運行bundle安裝或軟件包更新)之前,您提交以前的更改。這樣,如果您需要將項目的Gemfile.lock文件恢復到之前的狀態,那麼執行起來會更容易。有一個關於在How to undo last commit(s) in Git?

恢復你的提交如果你不熟悉的Git另一個StackOver線程,有一個在https://git-scm.com/book/en/v2

一個偉大的免費在線圖書如果您還沒有提交更改的機會,讓你可以返回到以前的Gemfile和Gemfile.lock,最好的方法是像Vinenes提到的那樣指定你需要的寶石版本。所述捆綁文檔過去如何,如果你需要一個參考http://bundler.io/v1.5/gemfile.html#gemfiles

確保後您指定您的Gemfile版本做到這一點,我們可以運行:

bundle update 

這將更新您的Gemfile.lock的文件,您需要的特定版本。

希望有幫助! :)

1

您可以在gemfile中添加該特定版本的gem,並執行捆綁安裝,它應該更新所有必需的依賴關係。

0

如果您使用的是Github,那麼可以運行git revert

這將恢復到舊提交(您選擇哪種提交恢復到),因此移除後提交所做的更改。