不修改Gemfile约束,能否阻止testgem 1.2.6-beta版本安装?
可以!无需修改原有约束就能阻止该beta版本安装
当然没问题,而且完全不用动你现有的gem 'testgem', '>= 1.2.0'约束——RubyGems的版本解析规则本身就帮你做了大部分工作,再配合简单的补充约束就能彻底解决问题:
1. 默认情况下,预发布版本根本不会被自动选中
RubyGems对带-beta、-rc这类后缀的预发布版本有默认的“忽略”逻辑:当你使用>= X.Y.Z这种范围约束时,它只会从稳定版本里挑选符合要求的最高版本。也就是说,哪怕1.2.6-beta已经存在,你运行bundle install或者gem install testgem时,它会优先选择1.2.5(如果有稳定版的话),完全不会主动安装那个beta版本,除非你手动加上--pre参数强制拉取预发布版。
2. 彻底堵死误装可能:添加排除约束
如果要确保哪怕有人误加--pre参数也装不了1.2.6-beta,你可以在原有约束基础上补充一个排除规则,不用修改原有的版本范围:
gem 'testgem', '>= 1.2.0', '!= 1.2.6.beta'
注意这里版本号的写法:RubyGems内部会把1.2.6-beta解析为1.2.6.beta,所以排除时要用点分隔的格式才能精准命中。
3. 已经装了beta版本的补救办法
如果你的项目里已经不小心安装了1.2.6-beta,只需要运行:
bundle update testgem
(不要加--pre参数),Bundler就会自动切换到符合>=1.2.0约束的最高稳定版本。如果是全局安装的gem,先卸载beta版再重装即可:
gem uninstall testgem -v 1.2.6-beta gem install testgem
内容的提问来源于stack exchange,提问作者snowflakekiller
相关产品推荐
相关产品推荐

