我在我的本地机器上安装了两个版本的devise gem,即设计(3.5.1)和设计(3.5.2)。
在我的gemfile中,我已经将devise gem包含在悲观版本约束中,如下所示。
gem 'devise' , '~> 3.4'
设计gem的依赖关系:
devise-encryptable-0.2.0 (devise (>= 2.1.0))
devise_invitable-1.4.0 (devise (>= 3.2.0))
devise_invitable-1.3.6 (devise (>= 3.2.0))
devise_security_extension-0.8.4 (devise (>= 2.0.0))
devise_security_extension-0.8.3 (devise (>= 2.0.0))
devise_security_extension-0.8.1 (devise (>= 2.0.0))
devise_security_extension-0.8.0 (devise (>= 2.0.0))
根据我的研究,这个运算符(〜>)的含义是它将寻找设计版本> = 3.4但是< 4.0。但每当我在我的项目主目录中捆绑show时,它会给出错误"Could not find devise-3.4.1 in any of the sources"
。
我的问题是为什么bundle show
命令发出错误,如果有设计的gem版本> = 3.4可用并安装在我的机器上(在我的案例设计版本3.5.2中)。
答案 0 :(得分:1)
您的Gemfile在此版本上被锁定,这就是为什么您的bundle install
命令不会查找其他版本的尝试运行bundle update devise
然后Rails将尝试寻找更新版本的devise
gem并更新你的依赖。
了解运营商~>
:
当您在Gemfile bundler
中添加新gem时,必须考虑到您具有依赖关系,然后运算符~>
开始执行,它将尝试查找所有gems文件中列出的所有gem的完整版本您的Gemfile并不会被锁定到特定版本,它将锁定到低于第一个数字的版本范围。
了解bundle install
:
bundle install
命令查找Gemfile.lock中列出的gems并且不会更新或更改任何gem版本,无论Gemfile中有哪个运算符。