rails 4指定用于开发,测试和生产的宝石

时间:2013-05-21 03:32:41

标签: ruby-on-rails heroku amazon-ec2

我在heroku上部署了应用程序作为测试和亚马逊作为生产。在测试和开发(本地)上,我使用了postgresql,在Amazon EC2上我使用了Mysql。所以我希望pg gem只在测试和开发时加载,并在生产时加载mysql2 gem。

解决问题的最佳做法是什么?

由于

2 个答案:

答案 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-elsecase块,仅在给定特定条件的情况下运行某些代码(并加载/安装某些gem)。

问题在于您的Gemfile.lock文件将在您的部署中不同步 - 这不是Bundler(或Capistrano)所期望的。但是有一些标志可以用来告诉你的部署忽略Gemfile.lock文件而bundle install基于它读取Gemfile,如果你真的想要......