我正在使用 Rails 4.2.7。我想创建一个启用扩展的迁移,但前提是我运行的主机环境中不存在该扩展。我创造了
class EnableUuidOsspExtension < ActiveRecord::Migration
def change
enable_extension 'uuid-ossp'
end
end
但如果已经启用,我想禁止启用扩展。如何调整上述迁移以实现此目的?这样做的动机是因为在我的本地机器上我必须运行它以将它添加到 PostGres,但是如果我迁移到 Heroku,这个扩展可能已经到位但我不希望在我运行数据库迁移时崩溃脚本。
最佳答案
有一个 extensions
方法返回一个扩展名数组,所以你可以这样做:
def up
enable_extension('uuid-ossp') unless extensions.include?('uuid-ossp')
end
def down
disable_extension('uuid-ossp') if extensions.include?('uuid-ossp')
end
您也可以在 SQL 中手动完成,您可以访问 create extension if not exists
:
def up
connection.execute('create extension if not exists "uuid-ossp"')
end
关于ruby-on-rails - 如何仅在扩展不存在时启用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213735/