2016-08-27 3 views
1

저는 여기 RoR과 함께 새로 왔습니다. 나는 5 시간 동안 앉아서 내 프로그램에 문제가 생기지 않는다. 나는 엄격한 튜토리얼을 따라이 일이 :RoR : 테이블이 존재하지 않습니다. 오류

루비 버전 : 2.2.4 레일 버전 : 5.0.0.1 유증 버전 : 4.2.0

다음
C:\RailsInstaller\Ruby2.2.0\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails db:migrate 
rails aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Mysql2::Error: Table 'rubyandroid_development.users' doesn't exist: CREATE UNIQUE INDEX `index_users_on_authentication_token` ON `users` (`authentication_token`) 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:12:in `block in change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:3:in `change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'rubyandroid_development.users' doesn't exist: CREATE UNIQUE INDEX `index_users_on_authentication_token` ON `users` (`authentication_token`) 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:12:in `block in change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:3:in `change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
Mysql2::Error: Table 'rubyandroid_development.users' doesn't exist 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:12:in `block in change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160826225028_devise_create_users.rb:3:in `change' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 
== 20160826225028 DeviseCreateUsers: migrating ================================ 
-- create_table(:users) 
-- add_index(:users, :authentication_token, {:unique=>true}) 

Process finished with exit code 1 

는 dB/마이그레이션/devise_create_users 코드입니다 : 여기

class DeviseCreateUsers < ActiveRecord::Migration[5.0] 
    def change 
    create_table :users do |t| 
     ## Database authenticatable 
     t.string :email,    null: false, default: "" 
     t.string :encrypted_password, null: false, default: "" 

     t.string :name, :null => false, :default => "" 

     #token hinzugefügt 
     t.string :authentication_token 
     add_index :users, :authentication_token, :unique => true 


     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     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 

     ## Confirmable 
     # t.string :confirmation_token 
     # t.datetime :confirmed_at 
     # t.datetime :confirmation_sent_at 
     # t.string :unconfirmed_email # Only if using reconfirmable 

     ## Lockable 
     # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     t.timestamps null: false 
    end 

    add_index :users, :email,    unique: true 
    add_index :users, :reset_password_token, unique: true 
    # add_index :users, :confirmation_token, unique: true 
    # add_index :users, :unlock_token,   unique: true 
    end 
end 

는 DB가/add_devise_to_users에게

class AddDeviseToUsers < ActiveRecord::Migration[5.0] 
    def self.up 
    change_table :users do |t| 
     ## Database authenticatable 
     t.string :email,    null: false, default: "" 
     t.string :encrypted_password, null: false, default: "" 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     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 

     ## Confirmable 
     # t.string :confirmation_token 
     # t.datetime :confirmed_at 
     # t.datetime :confirmation_sent_at 
     # t.string :unconfirmed_email # Only if using reconfirmable 

     ## Lockable 
     # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 
     # t.string :unlock_token # Only if unlock strategy is :email or :both 
     # t.datetime :locked_at 


     # Uncomment below if timestamps were not included in your original model. 
     # t.timestamps null: false 
    end 

    add_index :users, :email,    unique: true 
    add_index :users, :reset_password_token, unique: true 
    # add_index :users, :confirmation_token, unique: true 
    # add_index :users, :unlock_token,   unique: true 
    end 

    def self.down 
    # By default, we don't want to make any assumption about how to roll back a migration when your 
    # model already existed. Please edit below which fields you would like to remove in this migration. 
    raise ActiveRecord::IrreversibleMigration 
    end 
end 
,691,363 마이그레이션이고210

업데이트 : 행의 제안을 잊어 버렸습니다 : add_index : users, : authentication_token, : unique => true. 하지만 DB를 긁어 않는 지금 때 : 이동, 다음과 같은 오류가 발생합니다 : 당신이 정말로 첫 번째를하기 만해야 당신이 두 개의 마이그레이션 파일을 왜

Mysql2::Error: Duplicate column name 'email': ALTER TABLE `users` ADD `email` varchar(255) DEFAULT '' NOT NULL 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:5:in `block in up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:3:in `up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
ActiveRecord::StatementInvalid: Mysql2::Error: Duplicate column name 'email': ALTER TABLE `users` ADD `email` varchar(255) DEFAULT '' NOT NULL 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:5:in `block in up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:3:in `up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
Mysql2::Error: Duplicate column name 'email' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:5:in `block in up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/db/migrate/20160827004755_add_devise_to_users.rb:3:in `up' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `require' 
C:/Benutzer/Clemens/RubymineProjects/RubyAndroid/bin/rails:4:in `<top (required)>' 
-e:1:in `load' 
-e:1:in `<main>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 
== 20160827004755 AddDeviseToUsers: migrating ================================= 
-- change_table(:users) 
+0

어떤 자습서를 따라 왔습니까? 오류 메시지에, 사용자 테이블을 작성하지 않았고 존재하지 않는 테이블의 특정 컬럼에 인덱스를 적용하지 않았습니다. –

+0

다음은 내가 따라하는 자습서입니다. http://lucatironi.net/tutorial/2012/10/15/ruby_rails_android_app_authentication_devise_tutorial_part_one/이 자습서에서는 더 이상 사용되지 않는 authentication_token을 사용합니다. 그래서 이것을 위해 보석을 설치했습니다. (보석 'devise-token_authenticatable') – Peter

+0

레일 버전과 Devise 보석 버전을 알려주시겠습니까? –

답변

0

는 잘 모르겠어요. 첫 번째는하지해야 create_table 블록에 다음 줄

add_index :users, :authentication_token, :unique => true 

가 포함되어 있습니다. 나는 그 블록을 그 블록 아래에있는 라인으로 옮기는 것이 (create_table의 외부에 있지만 add_index 라인의 change 블록 안에)이 문제를 해결해야한다고 생각한다.

+0

대단히 고맙습니다. 이것이 문제였습니다. 나는이 라인을 추천하지 않았다. 그러나 이제는 rake db를 사용하려고 할 때 또 다른 문제가 발생합니다. migrate : Mysql2 :: Error : 중복 된 컬럼 이름 'email': ALTER TABLE'users' ADD'email'varchar (255) DEFAULT ''NOT NULL – Peter

+0

두 번째 마이그레이션 파일로 인해 오류가 발생했습니다 (이미 존재하는 열을 추가하려고 시도하고 있습니다. 구문과 비슷합니다). 'rake db : rollback'을 실행 해보십시오. 올바르게 실행되면 add_devise_to_users 마이그레이션을 삭제하십시오. 만약에 대비하여'rake db : migrate'를 다시 실행할 수도 있습니다. – kohrVid

+0

코, 감사합니다. 하지만 이제는 또 다른 큰 문제가 발생합니다.이 튜토리얼을 건너 뛰지 않으면 안됩니다. NoMethodError : 정의되지 않은 메소드 'authentication_token_created_at'를 보여줍니다. 이 방법은 더 이상 사용되지 않으며 인터넷에는이 방법이 없으므로 프로그램에 추가 할 수 없습니다. – Peter

관련 문제