我正在与一组开发人员合作,我们都在使用我们存储库中的相同Gemfile。因为我在Mac上工作,而其他人正在使用Ubuntu,我们在我们的存储库中也有一个Gemfile.local.example文件,每个操作系统都有相应的通知宝石,所有这些都被注释掉了。
我取消了我操作系统的宝石评论并保存为新文件,而不是版本控制Gemfile.local。现在我想“捆绑安装”从两个文件安装gems。
我找不到任何关于这样做的好文档。
答案 0 :(得分:7)
为什么不只有一个Gemfile
并使用groups之类的东西或使用:platform标志只在OS X上安装一些宝石而在Ubuntu上安装其他宝石?
拥有两个Gemfiles似乎相当笨拙。如果确实希望这样做,我可以提供用于bundle config
(man page)的Gem文件。我想。
答案 1 :(得分:5)
我同意使用两个Gemfiles是不好的做法,并且找到了一个解决方案,其中包含RUBY_PLATFORM
常量以及我的Gemfile中的platform
标志。这可能不是最优雅的解决方案,但它对我有用。
以下是好奇读者的一大块代码:
group :development, :test do
# Mac OSX notifications
gem 'growl_notify' if RUBY_PLATFORM.downcase.include?("darwin")
gem 'growl' if RUBY_PLATFORM.downcase.include?("darwin")
# Gnome notifications => aka for Linux
gem 'libnotify' if RUBY_PLATFORM.downcase.include?("linux")
# Guard-spork doesn't work with windows but it's
# awesome for other Operating Systems.
gem 'guard-spork' if RUBY_PLATFORM.downcase.include?('darwin') || RUBY_PLATFORM.downcase.include?('linux')
# Windows Rubies (RubyInstaller)
platforms :mswin, :mingw do
# Windows notifications
gem 'rb-notifu'
end
end
答案 2 :(得分:1)
我不确定跨平台的兼容性(看起来它只支持OS X),但RVM gemsets值得研究。我在工作中使用它,它工作得非常漂亮。
RVM允许我通过运行rvm use命令来创建和使用多个gemset配置。宝石安装在我正在使用的gemset中,因此您不必担心全局gemset中的冲突。
答案 3 :(得分:0)
你们都应该使用相同的Gemfile
,并且主人Gemfile.lock
也应该流传。至少这是理想的。
请记住,您可以使用Ruby来区分Bundle.setup
加载的部分,并且您可以使用组来定义仅与特定平台相关的内容。
Gemfile.lock
应代表应用程序部署方式的具体要求。它应该在版本控制系统中,因此不会混淆应用程序将启动的版本。如果此处存在平台问题,您应该小心使用的内容,并在必要时锁定仅:development
组的依赖关系。