Gemfile中的条件

cor*_*ded 9 gem ruby-on-rails bundler

我们的团队互相使用不同的数据库,我们正在使用bundler,因此我们的Gemfile包含repo creator的db连接器(mysql)

我正在使用pg,由于有点懒惰和害怕破坏,我不想使用mysql,所以我只是在我们的Gemfile中添加一个gem"pg".

当然,既然我们正在使用git,它将始终显示为已修改的文件,并且我们都使用Gemfile,因此我们无法对其进行gitignore或将其与我们的更改一起提交.

问题是,我们该如何解决这个问题?在捆绑器中是否存在条件或我是否必须声明我在其他地方使用某个宝石?

tad*_*man 16

因为Gemfile,就像Rakefile,只是一大块Ruby,如果你认为它会简化你的生活,你可以抛出条件.例如:

if (Gem.available?('pg'))
  gem 'pg'
else
  gem 'mysql2'
end
Run Code Online (Sandbox Code Playgroud)

有时您必须为不同的Ruby版本执行此操作,因为1.8和1.9有时需要不同的宝石.

  • 谢谢你!从那以后,`Gem.available?`已被弃用,然后被删除.新的等价物是`Gem :: Specification :: find_all_by_name(name).any?` (3认同)