我在 Rails 4 中使用 Apartment gem 来支持 Heroku 上 Postgres 9.3.3 中的多租户。
Apartment gem 创建新租户时出错。
深入调查显示创建了一个模式,但内部没有表。
Heroku 日志显示错误:
PG::Error: ERROR: function pg_stat_statements_reset() does not exist
我在 Rails 4 中使用 Apartment gem 来支持 Heroku 上 Postgres 9.3.3 中的多租户。
Apartment gem 创建新租户时出错。
深入调查显示创建了一个模式,但内部没有表。
Heroku 日志显示错误:
PG::Error: ERROR: function pg_stat_statements_reset() does not exist
当创建新模式时,Postgres 试图通过执行函数pg_stat_statements_reset()来重置统计信息
默认情况下,此功能只能由超级用户执行 (来自原始文档)。
Heroku 没有给你超级用户权限。所以你需要禁用扩展 pg_stat_statements。
解决方案 1 - 直接在数据库中快速修复
访问 Heroku 应用程序的 Rails 控制台:
heroku run rails c
在公共架构中执行 SQL 语句:
ActiveRecord::Base.connection.execute("DROP EXTENSION pg_stat_statements;")
解决方案 2 - 通过迁移
检查文件db/schema.rb。很可能它包含一行
enable_extension “pg_stat_statements”
创建迁移文件
rails g 迁移 DropExtensionPgStatStatements
定义 self.up 方法
def self.up disable_extension "pg_stat_statements" 结束
应用迁移
耙分贝:迁移
现在文件db/schema.rb不应包含该行
提交更改(架构和迁移文件)并部署到 Heroku
rake 部署:生产:迁移
关于 rake 任务见deploy.rake