gpt4 book ai didi

ruby-on-rails - gem 要求条件

转载 作者:行者123 更新时间:2023-12-03 15:52:11 24 4
gpt4 key购买 nike

我想阻止更新我的窗口 ( rmagick ) 上的 gem,所以它坚持 2.12.0 mswin32 .尽管如此,我的同事需要在他的达尔文安装上安装 gem ......

所以,我试图在 Gemfile 中做这样的事情:

if RUBY_PLATFORM =~ /darwin/i
gem 'rmagick', '~> 2.12.0'
else
gem 'rmagick', '=2.12.0.mswin32'
end

但是 bundle install投诉。

正确处理此问题的正确方法是什么?

最佳答案

你不能在 gemspec 上使用条件,因为 gemspec 是序列化的
进入 YAML,它不包含可执行代码。

我在 Gemfile 中遇到了相关问题本地 Rails 项目(不是
gem )。

目前,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 上开发(虽然它很丑陋)
系统。

但是,我们停止 checkin 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
...

关于ruby-on-rails - gem 要求条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com