ruby on rails - Enabling hstore when deploying with rubber -
i'm deploying rails app uses postgresql , hstore.
to deploy it, i'm ussing rubber.
everything works, except hstore not being enabled. when migration contains execute("create extension hstore") runs, following errors:
** [out :: production.---] ** [out :: production.---] -- execute("create extension hstore") ** [out :: production.---] ** [out :: production.---] rake aborted! ** [out :: production.---] error has occurred, , later migrations canceled: ** [out :: production.---] ** [out :: production.---] pg::error: error: permission denied create extension "hstore" ** [out :: production.---] hint: must superuser create extension. the script creates postgres instance has code:
create_user_cmd = "create user #{env.db_user} nosuperuser createdb nocreaterole" so think problem might related nosuperuser attribute being set here.
is there way enable hstore using rubber while keeping of generated files unchanged?
the problem rubber creates db user nosuperuser. workaround create tasks run before , after capistrano's deploy:migrate change user superuser , back.
here's code:
namespace :rubber namespace :project 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] 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] 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
Comments
Post a Comment