Rubygems:如何添加特定于平台的依赖关系?

Rubygems:如何添加特定于平台的依赖关系?,ruby,rubygems,Ruby,Rubygems,我发现每个操作系统都有不同的依赖项。我必须明确地把它们都写下来: 在Mac OS X上: gem install livereload 在Linux上: gem install rb-inotify livereload 在Windows上: gem install eventmachine-win32 win32-changenotify win32-event livereload 我可以稍微调整一下gemspec,使每个操作系统的安装说明看起来都像普通的gem install liv

我发现每个操作系统都有不同的依赖项。我必须明确地把它们都写下来:

在Mac OS X上:

gem install livereload
在Linux上:

gem install rb-inotify livereload
在Windows上:

gem install eventmachine-win32 win32-changenotify win32-event livereload

我可以稍微调整一下gemspec,使每个操作系统的安装说明看起来都像普通的
gem install livereload

概述了正确的方法。由于gempec是在包时进行评估的,因此需要在本机扩展中进行评估。别担心,这并不可怕,因为它仍然只是Ruby代码(不是编译C或其他东西)


我们目前正在OpenShift的一些客户端工具中使用这种方法。然后在gempec/Rakefile中,您将添加一个扩展,而不是添加依赖项。请注意,该文件需要命名为
ext/mkrf_conf.rb
,才能工作。

您的源链接无法工作。另外:是否可以简单地将所有gem作为依赖项添加到gempec中,并基于平台要求它们?(
如果RbConfig::CONFIG['target_os']=~/freebsd/i
)则需要“gemname”@Cort3z您缺少一个要点。您描述的解决方案是可行的,但它解决了在安装某些操作系统后不使用gem依赖项的问题。最初的问题是根本没有安装依赖项。我有一套内部开发的工具,它们结合了我们用于iOS、Android developemtn和其他任务的大量os shell和ruby脚本。它被包裹在一块红宝石里。对于iOS,我们有一些依赖项,比如xcodeproj、cocoapods、葫芦黄瓜。这些gems不会安装在除OSX以外的任何操作系统上,因为它们需要Xcode命令行工具、iOS模拟器和其他东西。但我仍然希望能够在Linux上安装gem,以使用Android脚本。我不会在Linux上使用任何iOS工具,但同样重要的是不要安装这些工具。当然,我可以构建两个版本的gem,一个用于OSX,另一个用于其他版本。但我更喜欢在gem服务器上安装on-gem的想法。检查gem如何处理其特定于平台的依赖关系似乎是一个好主意:和。