gpt4 book ai didi

ruby-on-rails - 使用 rubber 部署时启用 hstore

转载 作者:行者123 更新时间:2023-11-29 14:07:34 24 4
gpt4 key购买 nike

我正在部署一个使用 PostgreSQL 和 HSTORE 的 Rails 应用。

为了部署它,我使用了 rubber .

一切正常,除了 HSTORE 未正确启用。当包含 execute("CREATE EXTENSION hstore") 的迁移运行时,出现以下错误:

** [out :: production.---] 
** [out :: production.---] -- execute("CREATE EXTENSION hstore")
** [out :: production.---]
** [out :: production.---] rake aborted!
** [out :: production.---] An error has occurred, this and all later migrations canceled:
** [out :: production.---]
** [out :: production.---] PG::Error: ERROR: permission denied to create extension "hstore"
** [out :: production.---] HINT: Must be superuser to create this extension.

创建 postgres 实例的脚本有这段代码:

create_user_cmd = "CREATE USER #{env.db_user} WITH NOSUPERUSER CREATEDB NOCREATEROLE"

所以我认为问题可能与此处设置的 NOSUPERUSER 属性有关。

有没有办法在保持大部分生成文件不变的情况下使用 rubber 启用 hstore?

最佳答案

问题是 rubber 将数据库用户创建为 NOSUPERUSER。我的解决方法是创建在 capistrano 的 deploy:migrate 之前和之后运行的任务,这会将用户更改为 SUPERUSER 并返回。

代码如下:

namespace :rubber do

namespace :project do

before "deploy:migrate", "rubber:project:add_pg_superuser_and_enable_hstore"
after "deploy:migrate", "rubber:project:remove_pg_superuser"

task :add_pg_superuser_and_enable_hstore,
:roles => [:postgresql_master, :postgresql_slave] do
alter_user_cmd = "ALTER USER #{rubber_env.db_user} SUPERUSER"
create_hstore_cmd = "CREATE EXTENSION IF NOT EXISTS hstore;"
rubber.sudo_script "add_superuser_create_hstore", <<-ENDSCRIPT
sudo -i -u postgres psql -c "#{alter_user_cmd}"
sudo -i -u postgres psql -c "#{create_hstore_cmd}"
ENDSCRIPT
end

task :remove_pg_superuser, :roles => [:postgresql_master,
:postgresql_slave] do
alter_user_cmd = "ALTER USER #{rubber_env.db_user} NOSUPERUSER"
rubber.sudo_script "add_superuser_create_hstore", <<-ENDSCRIPT
sudo -i -u postgres psql -c "#{alter_user_cmd}"
ENDSCRIPT
end

end

end

关于ruby-on-rails - 使用 rubber 部署时启用 hstore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com