在我们的团队中,有些人没有在他们的机器上安装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.
有什么想法吗?
'未安装组中的宝石'运行后修复:rm -r ./。bundle
答案 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上,性能成本也很小。