Rails4.2.10+Ruby2.5.0中Sorcery注册页报错:users表不存在
嘿,看你遇到的这个问题:ActiveRecord::StatementInvalid (Mysql2::Error: Table 'geofly_test.users' doesn't exist: SHOW FULL FIELDS FROM users ),而且报错卡在users_controller.rb:29:in 'new'这里——说白了就是你访问注册页面时,Rails想去读users表的结构,但这个表压根儿没在test数据库里创建出来。结合你用了Sorcery这个身份验证gem,十有八九是还没生成并执行Sorcery的数据库迁移,或者迁移跑崩了。
给你一步步来解决:
第一步:生成Sorcery的用户表迁移文件
要是还没生成过,打开终端跑这个命令:rails generate sorcery:install这个命令会自动创建一个带Sorcery必备字段的users表迁移文件,比如邮箱、加密密码这些身份验证必须的字段。
第二步:核对迁移文件(可选但建议做)
去db/migrate文件夹里找到刚生成的那个迁移文件,确认它是用来创建users表的,里面的字段也符合你的需求(比如要不要加个姓名字段之类的)。第三步:执行数据库迁移
因为你报错里用的是test环境的geofly_test数据库,所以要指定环境跑迁移:rake db:migrate RAILS_ENV=test要是开发环境出问题,就去掉后面的
RAILS_ENV=test就行。第四步:确认表真的创建出来了
可以用MySQL客户端连到geofly_test数据库,执行SHOW TABLES;命令,看看users表是不是已经在那儿了。
另外,也可以瞅一眼你的users_controller.rb里的new方法,是不是实例化User.new的时候触发了什么需要读表字段的操作?比如强参数或者关联查询?不过核心问题还是表不存在,先把迁移搞定再说。
要是迁移已经跑过但还是报错,那可能是数据库配置的问题,去config/database.yml里检查下test环境的配置,确认连接的确实是geofly_test,用户名密码也没写错。
内容的提问来源于stack exchange,提问作者uberdave

