簡體   English   中英

運行rake db:seed時進行Heroku回滾

[英]Heroku rollback when running rake db:seed

我一直在尋找解決方案,我發現有些東西喜歡在您的gemfile中放置ruby版本,以免在播種時遇到回滾錯誤等。但是,沒有任何效果。 這是我正在部署到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(version: 20161231124005) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "bids", force: :cascade do |t| t.integer "amount" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "user_id" t.integer "product_id" t.index ["product_id"], name: "index_bids_on_product_id", using: :btree t.index ["user_id"], name: "index_bids_on_user_id", using: :btree end create_table "categories", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "products", force: :cascade do |t| t.string "title" t.text "description" t.string "image_url" t.integer "price" t.datetime "deadline" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "user_id" t.integer "category_id" end create_table "ratings", force: :cascade do |t| t.integer "rating" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "user_id" t.integer "product_id" end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "username" t.index ["email"], name: "index_users_on_email", unique: true, using: :btree t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree t.index ["username"], name: "index_users_on_username", unique: true, using: :btree end add_foreign_key "bids", "products" add_foreign_key "bids", "users" end 

這些是我嘗試提供隨機用戶名的種子(因為我添加了該列來設計gem):

 category1 = Category.create(name: "computers") category2 = Category.create(name: "mobile") category3 = Category.create(name: "clothes") category4 = Category.create(name: "accesories") Product.create(category: category1, title: "McBook", description: "Best PC for developers", price: 500,image_url: "mc-book.jpg", user_id: 1, deadline: "12/11/2016") Product.create(category: category3,title: "Winter jacket", description: "Keep it warm even in wintertime", price: 40,image_url: "winter-jacket.png", user_id: 1, deadline: "18/04/2016") Product.create(category: category4,title: "Rayban sunglasses", description: "Cool sunglasses for summertime", price: 60,image_url: "rayban.jpg", user_id: 1, deadline: "09/12/2016") Product.create(category: category3,title: "Casual Jacket", description: "Cool jacket", price: 20,image_url: "jacket.jpg", user_id: 1, deadline: "09/12/2016") Product.create(category: category1,title: "HP computer", description: "Ultimate computer", price: 300,image_url: "hp.png", user_id: 1, deadline: "09/12/2016") Product.create(category: category4,title: "Normal sunglasses", description: "Geeky glasses", price: 10,image_url: "sunglasses.png", user_id: 1, deadline: "09/12/2016") 10.times do |index| User.create(username: "user-#{ SecureRandom.hex(10)}", email: "email#{index}@example.com", password: 'password123#') end 

這是因為數據庫中已經存在具有相同電子郵件("b@gmail.com")的用戶,並且我認為您已經對email進行了唯一性驗證

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 User < ApplicationRecord has_many :products has_many :ratings has_many :bids validates :email, presence: true, format: { with: /\\A[\\w+\\-.]+@[az\\d\\-]+(\\.[az\\d\\-]+)*\\.[az]+\\z/i }, uniqueness: { case_sensitive: false } # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end 

然后,我不知道為什么當我移到Postgres時,來自的user_id和產品之間的關系給我錯誤,因此我使用了以下方法:rails g migration AddUserToProducts user:references。

然后使用以下方法將數據庫投入生產:heroku pg:reset DATABASE

更改以下種子:

 category1 = Category.create(name: "computers") category2 = Category.create(name: "mobile") category3 = Category.create(name: "clothes") category4 = Category.create(name: "accesories") Product.create(category: category1, title: "McBook", description: "Best PC for developers", price: 500,image_url: "mc-book.jpg", user_id: 2, deadline: "12/11/2016") Product.create(category: category3,title: "Winter jacket", description: "Keep it warm even in wintertime", price: 40,image_url: "winter-jacket.png", user_id: 2, deadline: "18/04/2016") Product.create(category: category4,title: "Rayban sunglasses", description: "Cool sunglasses for summertime", price: 60,image_url: "rayban.jpg", user_id: 2, deadline: "09/12/2016") Product.create(category: category3,title: "Casual Jacket", description: "Cool jacket", price: 20,image_url: "jacket.jpg", user_id: 2, deadline: "09/12/2016") Product.create(category: category1,title: "HP computer", description: "Ultimate computer", price: 300,image_url: "hp.png", user_id: 2, deadline: "09/12/2016") Product.create(category: category4,title: "Normal sunglasses", description: "Geeky glasses", price: 10,image_url: "sunglasses.png", user_id: 2, deadline: "09/12/2016") User.create(id: 2, email: "b@gmail.com", username: "paco", password: "653412") 

最后運行heroku運行rake db:seed和heroku運行rake db:seed。

這次,盡管用戶無法使用種子用戶身份登錄,但仍保存了產品。 因此,我注冊了另一個用戶(在前端)並將產品分配給他。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM