我有一个Rails 4应用程序。前段时间,在运行bundle install
和bundle update
之后,我的应用程序开始出现问题。我发现法拉第宝石造成了一些问题,并且由于其他一些宝石依赖它,我无法卸载它。然后我发现我的项目备份是在我发出bundle install
/ bundle update
命令之前的。那时我的申请表现很好。
当我将旧的Gemfile.lock与当前版本进行比较时,我发现有些宝石现在有了更新的版本。我相信存在应用问题的原因。
这些只是我当前的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
个宝石。
答案 0 :(得分:2)
您应该尝试在文件中添加gems的特定版本。这样,您将拥有特定gem所需的依赖版本。
答案 1 :(得分:1)
我使用我的Rails应用程序几次遇到过这种情况。由于这是您可能经常遇到的问题,我建议您确保使用某种类型的版本控制系统,如Git。确保在安装gem或更新Gemfile.lock(即运行bundle install或bundle update)之前,先提交以前的更改。这样,如果您需要将项目的Gemfile.lock文件恢复到以前的状态,那么操作起来会容易得多。还有另一个StackOver线程在How to undo last commit(s) in Git?
恢复您的提交如果您不熟悉Git,那么https://git-scm.com/book/en/v2
上有一本很棒的免费在线图书如果您还没有机会提交更改,以便可以返回之前的Gemfile和Gemfile.lock,那么最好的办法就是像Vineeth一样指定所需的宝石版本。如果您需要参考http://bundler.io/v1.5/gemfile.html#gemfiles
,Bundler文档会详细说明如何执行此操作确保在Gemfile中指定版本后,运行:
bundle update
这将使用您需要的特定版本更新Gemfile.lock文件。
希望有所帮助! :)
答案 2 :(得分:1)
您可以在gemfile中添加该gem的特定版本并进行bundle install,它应该更新所有必需的依赖项。
答案 3 :(得分:0)
如果您正在使用Github,则可以运行git revert
?
这将恢复为较旧的提交(您选择要恢复的提交),从而删除提交后所做的更改。