从Rails 4在Amazon RDS中启用hstore扩展

时间:2014-01-08 03:06:28

标签: ruby-on-rails postgresql activerecord ruby-on-rails-4 amazon-rds

我有一个使用ActiveRecord与PostgreSQL 9.3数据库交互的Rails 4应用程序。该应用程序利用PostgreSQL中的hstore扩展名将键值对存储在单个数据库字段中。因此,Rails会自动检测我对该迁移所做的操作,并在schema.rb文件中创建以下行

enable_extension "hstore"

在开发和测试环境中,这很有效,因为我正在部署到独立的PostgreSQL实例。但是在生产中,我正在部署到Amazon RDS中的PostgreSQL实例,其中扩展必须由rds_superuser组的成员安装。我宁愿不让我的应用程序用户担任该角色。

有没有办法让该代码的执行依赖于环境?例如,在测试中运行开发中的代码,而不是部署到生产?

我尝试过创建一个有条件的迁移,但是在生成模式时它不会消除上面的行。例如:

class ModifyHstoreSetup < ActiveRecord::Migration
  def self.up
    if %w(staging, production).include?(ENV["RAILS_ENV"] || "development")
      enable_extension "plpgsql"
      enable_extension "hstore"
    end
  end
  def self.down
    if %w(staging, production).include?(ENV["RAILS_ENV"] || "development")
      disable_extension "plpgsql"
      disable_extension "hstore"
    end
  end
end

1 个答案:

答案 0 :(得分:0)

只需将您的用户成为rds_superuser组。然后您的迁移将成功。