Ruby on rails 运行rake db:seed时Heroku回滚

Ruby on rails 运行rake db:seed时Heroku回滚,ruby-on-rails,postgresql,heroku,deployment,Ruby On Rails,Postgresql,Heroku,Deployment,我一直在寻找一个解决方案,我已经找到了一些类似的方法,比如把ruby的版本放在你的gemfile中,这样就不会在播种时遇到回滚错误,等等。但是,没有任何效果。这是我部署到Heroku的第三个应用程序,也是我第一次遇到以下错误: User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] (0.4ms) ROLLBACK (0

我一直在寻找一个解决方案,我已经找到了一些类似的方法,比如把ruby的版本放在你的gemfile中,这样就不会在播种时遇到回滚错误,等等。但是,没有任何效果。这是我部署到Heroku的第三个应用程序,也是我第一次遇到以下错误:

User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
   (0.4ms)  ROLLBACK
   (0.4ms)  BEGIN
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
   (0.4ms)  ROLLBACK
   (0.4ms)  BEGIN
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
   (0.4ms)  ROLLBACK
   (0.4ms)  BEGIN
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
   (0.4ms)  ROLLBACK
   (0.7ms)  BEGIN
  User Exists (1.0ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2  [["email", "b@gmail.com"], ["LIMIT", 1]]
  SQL (1.0ms)  INSERT INTO "users" ("id", "email", "encrypted_password", "created_at", "updated_at", "username") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id"  [["id", 1], ["email", "b@gmail.com"], ["encrypted_password", "$2a$11$K.dh0OhopIOVZgT..0Yi7ukDGcw/IHmCAmZaH7LuHWZnfbJLaSWzS"], ["created_at", 2017-01-05 17:07:23 UTC], ["updated_at", 2017-01-05 17:07:23 UTC], ["username", "paco"]]
   (1.3ms)  COMMIT
其中,我有一个用户名和一个654321密码作为一个例子,它正在被加密,正如你在第二行到最后一行看到的那样

这是我的模式:

ActiveRecord::Schema.define(版本:20161231124005)do
#为了支持此数据库,必须启用这些扩展
启用扩展名“plpgsql”
创建表格“bids”,强制::级联do | t|
t、 整数“金额”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 整数“用户id”
t、 整数“产品标识”
t、 索引[“产品id”],名称:“产品id上的索引投标”,使用::btree
t、 索引[“user\u id”],名称:“index\u bids\u on\u user\u id”,使用::btree
结束
创建表格“类别”,强制::级联do | t|
t、 字符串“name”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
结束
创建表格“产品”,强制::级联do | t|
t、 字符串“title”
t、 文本“说明”
t、 字符串“image\u url”
t、 整数“价格”
t、 日期时间“截止日期”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 整数“用户id”
t、 整数“category_id”
结束
创建表格“评级”,强制::级联do | t|
t、 整数“评级”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 整数“用户id”
t、 整数“产品标识”
结束
创建“用户”表,force::cascade do | t|
t、 字符串“email”,默认值:,null:false
t、 字符串“加密的_密码”,默认值:“”,null:false
t、 字符串“重置密码\u令牌”
t、 日期时间“重置密码发送时间”
t、 datetime“记住您创建的时间”
t、 整数“计数中的符号”,默认值:0,空值:false
t、 日期时间“当前登录时间”
t、 datetime“最后一次登录时间”
t、 字符串“当前\u符号\u在\u ip中”
t、 字符串“ip中的最后一个签名”
t、 datetime“created_at”,null:false
t、 datetime“更新时间”,null:false
t、 字符串“用户名”
t、 索引[“电子邮件”],名称:“在电子邮件上索引用户”,唯一:true,使用::btree
t、 索引[“重设密码重设令牌”],名称:“重设密码重设令牌上的索引用户重设令牌”,唯一:true,using::btree
t、 索引[“username”],名称:“index\u users\u on\u username”,唯一:true,using::btree
结束
添加外键“投标”、“产品”
添加外键“投标”、“用户”

结束
这是因为用户使用相同的电子邮件
(“b@gmail.com“”
已存在于数据库中,我认为您对
电子邮件

User Exists (1.0ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2  [["email", "b@gmail.com"], ["LIMIT", 1]]
使用类似这样的顺序更改用户的电子邮件

10.times do |index|
  User.create(email: "email#{index}@example.com", password: 'password123#')
end
这将创建10个具有不同电子邮件的用户

email0@example.com
email1@example.com
email2@example.com
email3@example.com
email4@example.com
email5@example.com
email6@example.com
email7@example.com
email8@example.com
email9@example.com

我做到了。我在模型中键入了以下内容:

class用户结束
Nops我遇到了相同的错误“回滚”。我的应用程序在localhost中运行正常,但在部署时,我在heroku运行rake db:seed时发现错误如果我在没有heroku的情况下运行rake db:seed,我会得到以下结果:ActiveRecord::RecordNotUnique:PG::UniqueViolation:错误:重复键值违反唯一约束“users\u pkey”详细信息:键(id)=(2)已存在:在“用户”(“电子邮件”、“加密密码”、“创建密码”、“更新密码”、“用户名”)值($1、$2、$3、$4、$5)中插入返回“id”的值。但是,我不明白为什么我会在那里获得“加密密码”。。。