Heroku 对 postgresql 的方式做了改变扩展已安装 https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search#installing-extensions
这会搞砸 Heroku 中的新 Rails 审查应用程序,并出现以下错误。
错误:扩展“btree_gist”必须安装在架构“heroku_ext”中
这把事情搞砸了,因为我需要删除现有的扩展并使用 heroku_ext 模式重新启用。我在运行迁移之前使用 bin/rails db:struct:load 。
此外,随着 Heroku 在审核应用程序中添加架构,Structure.sql 也会出现分歧,我们需要在本地开发计算机中手动运行创建。
有人遇到过这个问题吗?
我开发了一个猴子补丁解决方案,这绝对是一个黑客,但比预约会迁移或从 schema.rb 中删除行更好。
把这个放进去config/initializers
。我打电话给我的_enable_extension_hack.rb
以确保它尽早加载。
module EnableExtensionHerokuMonkeypatch
# Earl was here
def self.apply_patch!
adapter_const = begin
Kernel.const_get('ActiveRecord::ConnectionAdapters::PostgreSQLAdapter')
rescue NameError => ne
puts "#{self.name} -- #{ne}"
end
if adapter_const
patched_method = adapter_const.instance_method(:enable_extension)
# Only patch this method if it's method signature matches what we're expecting
if 1 == patched_method&.arity
adapter_const.prepend InstanceMethods
end
end
end
module InstanceMethods
def enable_extension(name)
name_override = name
if schema_exists?('heroku_ext')
puts "enable_extension -- Adding SCHEMA heroku_ext"
name_override = "#{name}\" SCHEMA heroku_ext -- Ignore trailing double quote"
end
super name_override
end
end
end
EnableExtensionHerokuMonkeypatch.apply_patch!
它有什么作用?它猴子修补enable_extension
导致问题的调用db/schema.rb
。具体来说,如果发现有一个名为"heroku_ext"
, 它会decorate给定的参数enable_extension
这样执行的 SQL 就指定了"heroku_ext"
架构。像这样:
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements" SCHEMA heroku_ext -- Ignore trailing double quote"
如果没有这个 hack,生成的 SQL 看起来像这样:
CREATE EXTENSION IF NOT EXISTS "pg_stat_statements"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)