2012-03-27 40 views
17

Tôi đang làm việc thông qua các hướng dẫn đường ray và đã gặp khó khăn. Bắt đầu từ Listing 8,16 tôi đã thực hiện các thay đổi sau đây để <timestamp>_add_remember_token_to_users.rb:rake db: di chuyển không hoạt động

class AddRememberTokenToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :remember_token, :string 
    add_index :users, :remember_token 
    end 
end 

Hướng dẫn sau đó nói để cập nhật dev & kiểm tra db như thường lệ:

$ bundle exec rake db:migrate 
$ bundle exec rake db:test:prepare 

kiểm tra tài khoản của tôi cho * remember_token * vẫn là thất bại vì vậy tôi đã xem bảng người dùng trong cơ sở dữ liệu dev và thử nghiệm với dòng lệnh sqlite3. Chúng trông giống như sau:

sqlite> .schema users 
CREATE TABLE "users" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "name" varchar(255), 
    "email" varchar(255), 
    "created_at" datetime NOT NULL, 
    "updated_at" datetime NOT NULL, 
    "password_digest" varchar(255)); 
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email"); 

Dường như quá trình di chuyển của tôi chưa được chạy nhưng tôi không biết bắt buộc phải chạy như thế nào.

+0

Đầu ra của nhiệm vụ rake là gì? – jdl

+0

Nếu bạn có nghĩa là những gì đầu ra là có sau khi chạy bó exec rake db: di chuyển - không có đầu ra, chỉ cần một dấu nhắc mới. – hippeelee

Trả lời

42

Cố gắng xây dựng lại cấu trúc cơ sở dữ liệu của bạn (CẢNH BÁO: tất cả db-dữ liệu sẽ bị mất):

rake db:drop:all 
rake db:create:all 
rake db:migrate 

Nếu bạn sử dụng Rails < 4.1, đừng quên chuẩn bị cơ sở dữ liệu kiểm tra:

rake db:test:prepare 

Đây là giải pháp dễ dàng nhất kể từ khi bạn làm việc với hướng dẫn. Tuy nhiên trong sản xuất hoặc có dữ liệu quan trọng trong phát triển, bạn nên dành thời gian để điều tra vấn đề. Trong trường hợp này, rất có thể bạn đã tạo một di chuyển trống, chạy rake db:migrate, sau đó thêm hướng dẫn di chuyển, vì vậy bạn không thấy trường mới và thêm rake db:migrate không làm gì cả. Để giải quyết vấn đề này, bạn cần phải nhận xét hướng dẫn change của mình, thực hiện rake db:rollback, hướng dẫn bỏ ghi chú và sau đó rake db:migrate để áp dụng các hướng dẫn bạn đã bỏ lỡ.

+0

Điều này đã khắc phục sự cố cơ sở dữ liệu của tôi. Cảm ơn. Mặc dù vậy, tất cả các thử nghiệm của tôi bắt đầu thất bại cho đến khi tôi nhớ chạy lại $ bundle exec rake db: test: preparation – hippeelee

+0

Điều này làm việc. Chỉ cần cập nhật để thực hiện lệnh db exec {} cho Rails 5.1. Trong thực tế, phần bó bó thậm chí có thể là tùy chọn. – VisWebsoft

2

Cuộn lại và sau đó chạy lại quá trình di chuyển có thể hoạt động.

 rake db:rollback 

Và sau khi quay lại, hãy chạy lại di chuyển của bạn.

4

Tôi gặp vấn đề tương tự như câu hỏi ban đầu. $ bundle exec rake db:migrate không thêm ghi nhớ_tob vào câu trả lời .db và Latha Doddikadi làm việc cho tôi.

tôi đã làm:

rake db:rollback 

và sau đó:

$ bundle exec rake db:migrate 

mà thêm vào lĩnh vực remember_token cơ sở dữ liệu tiếp theo:

bundle exec rspec spec/models/user_spec.rb 

mà trôi qua.

Finished in 0.92841 seconds 
21 examples, 0 failures 
Các vấn đề liên quan