我想阻止在我的
Windows(rmagick)上更新gem,所以它坚持2.12.0 mswin32.不过,我的同事需要在他的达尔文装置上拥有宝石……
所以,我试图在Gemfile中做这样的事情:
if RUBY_PLATFORM =~ /darwin/i
gem 'rmagick', '~> 2.12.0'
else
gem 'rmagick', '=2.12.0.mswin32'
end
但捆绑安装投诉.
正确处理这个问题的正确方法是什么?
最佳答案 你不能在gemspec上使用条件,因为gemspec是序列化的
进入YAML,它不包含可执行代码.
我在本地Rails项目的Gemfile中遇到了一个相关的问题(不是
宝石).
目前,Gemfile包含:
group :test do
...
# on Mac os X
gem 'rb-fsevent' if RUBY_PLATFORM.include?("x86_64-darwin")
gem 'ruby_gntp' if RUBY_PLATFORM.include?("x86_64-darwin")
# on Linux
gem 'rb-inotify' unless RUBY_PLATFORM.include?("x86_64-darwin")
gem 'libnotify' unless RUBY_PLATFORM.include?("x86_64-darwin")
end
这适用于在Mac和Linux上进行开发(尽管很难看)
系统.
但是,我们停止检查Gemfile.lock,因为它每次都会更改
具有不同平台的开发人员检查代码.
因此,多平台Gemfiles的解决方案也应该解决问题
Gemfile.lock的问题.
其他解决方案是为每个目标操作系统构建多个.gemspec文件,并更改每个平台的平台和依赖关系:
gemspec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
end
# here build the normal gem
# Now for linux:
gemspec.platform = "linux"
gemspec.add_dependency ...
# build the newer gemspec
...