如何选择从Gemfile中排除gem pg?

时间:2014-10-16 10:49:03

标签: ruby-on-rails postgresql gem rubygems

在我们的团队中,有些人没有在他们的机器上安装pg gem。目前我们使用两个seprate数据库配置,这些配置被复制到database.yml。我们遇到了这种方法的问题,因为我们不得不在我们的Gemfile中注释掉gem pg。所以我试着在我们的Gemfile中跟随:

unless ['host1, 'host2'].include? `hostname`.strip!
  gem 'pg'
end

它似乎有用,但老板想要一个更好的解决方案,这样他就可以在他的笔记本电脑上测试应用程序而无需安装Postgres并且没有在Gemfile中使用他的主机名。

Gem::Specification.all_names

没有显示pg正在安装,尽管' gem list pg --local'显示它已安装。

尝试在Gemfile中使用gem list pg --local并不起作用,因为如果您没有安装pg,系统似乎会进入无限循环。

是否有类似于' Gem :: Specification.all_names'正确显示已安装的宝石列表,可以在Gemfile中选择性地排除Gems。或者,对于上述场景,是否有更好的方法在不同的机器上使用不同的Gems?

注释

if File.open('./config/database.yml').read.each_line.first.index('Postgre').is_a?(Integer)
 gem 'pg'
end

似乎有效但现在我在运行bundle install时得到了这个:

Your bundle is complete!
Gems in the group postgres were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

有什么想法吗?

注2

'未安装组中的宝石'运行后修复:rm -r ./。bundle

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是使用custom environment和捆绑组。

您可能已在config/application.rb注意到这一行:

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

这意味着运行rails s -e bossmode将需要宝石:

group :bossmode do
  # no pg in here...
end

更好的解决方案是让老板说服KISS并使用PG。即使在低端的macbook air上,性能成本也很小。