我在heroku上部署了应用程序作为测试和亚马逊作为生产。在测试和开发(本地)上,我使用了postgresql,在Amazon EC2上我使用了Mysql。所以我希望pg gem只在测试和开发时加载,并在生产时加载mysql2 gem。
解决问题的最佳做法是什么?
由于
答案 0 :(得分:1)
Gemfile在Rails 3.2和Rails 4中的表现是否不同? 如果没有,那么您可以指定应在哪个环境中加载哪个gem:
group :development, :test do
gem "pg"
end
group :production do
gem "mysql2"
end
答案 1 :(得分:1)
最佳做法是使用相同的dbms进行开发,测试和生产。但我怀疑这是你想听到的......
无论如何,bundler不支持此方案。也就是说,你不能简单地告诉它不要在给定的环境中安装某些宝石 - 即使它们不会被使用。您可以通过在group
块中声明它们(如@ mind.blank建议)来告诉它不加载某些宝石,但它们仍将被安装。但是,您可以使用简单的ruby构造,即if-else
或case
块,仅在给定特定条件的情况下运行某些代码(并加载/安装某些gem)。
问题在于您的Gemfile.lock文件将在您的部署中不同步 - 这不是Bundler(或Capistrano)所期望的。但是有一些标志可以用来告诉你的部署忽略Gemfile.lock文件而bundle install
基于它读取Gemfile,如果你真的想要......