在VPS中我安装了Postgres和2个Rails项目。两者都在生产模式下运行并将PG连接为不同的用户。
现在我想为其中一个设置CruiseControl.rb。一切都很顺利,除非巡航试图进行测试时抛出这个错误:
PGError: ERROR: permission denied to create database
: CREATE DATABASE "myProject" ENCODING = 'utf8'
此测试数据库使用不同的所有者名称创建,并且所有这些都在~/.cruise/projects/myProject/work/config/database.yml
中正确指定。
当我在~/.cruise/projects/myProject/work
内手动运行以下一系列命令时,它们运行正常。
RAILS_ENV=test rake db:migrate
rake test
我使用以下命令创建了数据库:
create user test_user with password 'abcxyz';
create database test_database TEMPLATE template0 owner test_user;
grant all privileges on database test_database to test_user;
点击Build Now
按钮后,test_database
被删除,然后再次尝试创建它并抛出该异常。
我很困惑,为什么测试数据库会在第一时间被删除?这里有什么我想念的吗?
答案 0 :(得分:0)
听起来您没有授予测试用户访问权限来创建新数据库,即使您在现有test_database上为test_user发布了权限。
您可能需要授予权限以创建新的数据库,如下所示:
GRANT CREATE ON SCHEMA public TO test_user;
您在创建test_user之前执行的命令,因此必须以管理员或postgres用户身份执行。
<强> TL; DR 强>
您应该将您的巡航用户的权限与您手动执行这些步骤的用户进行比较,这会阻止在db:test:prepare
期间创建测试数据库