相关疑难解决方法(0)

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

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

enable_extension "hstore"
Run Code Online (Sandbox Code Playgroud)

在开发和测试环境中,这很有效,因为我正在部署到独立的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
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails amazon-rds ruby-on-rails-4

5
推荐指数
1
解决办法
1838
查看次数