【发布时间】:2014-10-16 10:49:02
【问题描述】:
在我们的团队中,有些人没有在他们的机器上安装 pg gem。目前我们使用两个单独的数据库配置,它们被复制到 database.yml。我们在使用这种方法时遇到了问题,因为我们必须在 Gemfile 中不断注释掉 gem pg。所以我尝试在我们的 Gemfile 中进行以下操作:
unless ['host1, 'host2'].include? `hostname`.strip!
gem 'pg'
end
似乎可行,但老板想要一个更好的解决方案,这样他就可以在笔记本电脑上测试应用程序,而无需安装 Postgres,也无需在 Gemfile 中包含他的主机名。
Gem::Specification.all_names
虽然 'gem list pg --local' 显示它已安装,但不显示 pg 正在安装。
尝试在 Gemfile 中使用 gem list pg --local 不起作用,因为如果您没有安装 pg,系统似乎进入了无限循环。
是否有类似于 'Gem::Specification.all_names' 的内容正确显示已安装 gem 的列表,这些 gem 可用于可选排除 Gemfile 中的 gem。或者有没有更好的方法在上述场景中在不同机器上使用不同的宝石?
注意
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
“未安装组 postgres 中的 Gem”在运行后已修复:rm -r ./.bundle
【问题讨论】:
-
老板很痛苦 :)。您可以使用dotenv 并添加一个
MYAPP_DB_DRIVER环境变量。 -
很抱歉刚刚意识到在读取 gem 文件时使用 dotenv 设置的 var 将不可用,您应该手动设置它。
-
我不介意选择数据库驱动程序。这是通过复制正确的 database.yml 完成的。我想避免与缺少 pg gem 相关的错误。
-
你可以随心所欲地调用变量,我的意思是你会测试
ENV["USE_POSTGRESS"]或你的 gemfile 中的任何东西,而不是使用主机名。 -
您可以在特定的“组”中指定 gem。例如,如果您要在机器上安装特定于生产的 gem,则将 gem 添加到
group :production do gem 'pg' end下。 Example of a Gemfile
标签: ruby-on-rails postgresql gem rubygems