为了账号安全,请及时绑定邮箱和手机立即绑定

PG无法定义的错误关系用户不存在

PG无法定义的错误关系用户不存在

ibeautiful 2019-12-21 12:51:56
我之前看到过这个问题,但仅适用于rspec。我还没有创建测试,因为它对我来说太高级了,但是很快我就会!:P当我尝试注册/登录我的应用程序时出现此错误。我使用devise创建用户,还使用omniauth2使用google登录。这是错误ActiveRecord::StatementInvalid at /users/auth/google_oauth2/callbackPG::UndefinedTable: ERROR:  relation "users" does not existLINE 5:              WHERE a.attrelid = '"users"'::regclass                                        ^:             SELECT a.attname, format_type(a.atttypid, a.atttypmod),                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod              FROM pg_attribute a LEFT JOIN pg_attrdef d                ON a.attrelid = d.adrelid AND a.attnum = d.adnum             WHERE a.attrelid = '"users"'::regclass               AND a.attnum > 0 AND NOT a.attisdropped             ORDER BY a.attnum我试过了rake db:migrate,但是已经创建了:在模式表中,存在用户。之前有人收到此错误吗?数据库config = / opt / local / lib / postgresql84 / bin / pg_configdevelopment:  adapter: postgresql  encoding: unicode  database: tt_intraweb_development  pool: 5  username: my_username  password:test:  adapter: postgresql  encoding: unicode  database: tt_intraweb_test  pool: 5  username: my_username  password:production:  adapter: postgresql  encoding: unicode  database: tt_intraweb_production  pool: 5  username: my_username  password:
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

首先,您应从数据库中分离所有连接。默认情况下,您使用开发环境。然后尝试使用以下方法重置数据库:


rake db:reset

rake db:reset任务将删除数据库并重新设置。这在功能上等同于rake db:drop db:setup。


这与运行所有迁移不同。它将仅使用当前schema.rb文件的内容。如果无法回滚迁移,则rake db:reset可能对您没有帮助。要了解有关转储模式的更多信息,请参阅“模式转储和您”部分。Rails文件


如果技巧不起作用,请删除数据库,然后重新创建数据库,迁移数据,如果有种子,请播种数据库:


rake db:drop db:create db:migrate db:seed

或简而言之(从3.2开始):


rake db:migrate:reset db:seed

由于db:migrate:reset暗示删除,因此创建和迁移数据库。因为默认的环境rake是development,所以如果您在规格测试中看到异常,则应该为测试环境重新创建db,如下所示:


RAILS_ENV=test rake db:drop db:create db:migrate

或仅加载迁移的方案:


RAILS_ENV=test rake db:drop db:create db:schema:load

在大多数情况下,测试数据库是在测试过程中播种的,因此db:seed不需要通过任务操作。否则,您应该准备数据库(在Rails 4中已弃用):


rake db:test:prepare

然后(如果确实需要):


RAILS_ENV=test rake db:seed

在较新版本的Rails上,可能会出现错误ActiveRecord :: NoEnvironmentInSchemaError,因此只需在数据库环境设置任务之前添加任务:db:environment:set即可:


RAILS_ENV=test rake db:environment:set db:drop db:create db:migrate


查看完整回答
反对 回复 2019-12-21
?
九州编程

TA贡献1785条经验 获得超4个赞

我遇到此错误,并且在研究后发现PG无法定义的错误关系用户不存在错误的原因之一是:


此错误是迁移错误。您可能已经创建了具有某些数据库属性的新模型。创建模型后,您必须将属性迁移到Rails应用模式。


如果使用本地计算机进行开发,则可以使用命令


rake db:migrate

如果您使用的是heroku


heroku run rake db:migrate


查看完整回答
反对 回复 2019-12-21
?
弑天下

TA贡献1818条经验 获得超7个赞

您的测试数据库尚未准备好用于rspec。


准备用于rspec的测试数据库以修复此错误


RAILS_ENV=test rake test:prepare

它将删除,创建迁移并将其添加到测试数据库


如果rake任务中止并显示类似“ PG :: Error:ERROR”的消息:其他用户正在访问数据库“ [your_db_test]”,请执行此操作


RAILS_ENV=test rake db:migrate


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 986 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信