【问题标题】:Rubygems: How do I add platform-specific dependency?Rubygems:如何添加特定于平台的依赖项?
【发布时间】:2011-01-04 17:36:14
【问题描述】:

a ruby gem 对每个操作系统都有不同的依赖关系。我必须明确地把它们都写下来:

在 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 一样简单吗?

【问题讨论】:

标签: ruby rubygems


【解决方案1】:

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

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

【讨论】:

  • 您的源链接不起作用。另外:不可能简单地将所有 gem 作为依赖项添加到 Gemspec 中,并根据平台要求它们吗? (require 'gemname' if RbConfig::CONFIG['target_os'] =~ /freebsd/i)
  • @Cort3z 您遗漏了重要的一点。您描述的解决方案有效,但它解决了安装后某些操作系统不使用 gem 依赖项的问题。最初的问题是根本没有安装依赖项。
  • 这是我的例子。我有一套内部开发的工具,结合了我们用于 iOS、Android 开发和其他任务的一些 os shell 和 ruby​​ 脚本。这一切都被包裹在一个 Ruby gem 中。对于 iOS,我们有 xcodeprojcocoapodscalabash-cucumber 等依赖项。这些 gem 不会安装在 OSX 以外的任何操作系统上,因为它们需要 Xcode 命令行工具、iOS 模拟器和其他东西。但我仍然希望能够在 Linux 上安装 gem 以使用 Android 脚本。我不会在 Linux 上使用任何 iOS 工具,但不要安装这些工具也很重要。
  • 当然,我可以构建 2 个版本的 gem,一个用于 OSX,一个用于其余版本。但我更喜欢在 gem 服务器上拥有 gem 的想法。
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 2020-02-04
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2011-06-20
相关资源
最近更新 更多