2013-06-06 4 views
4

rake db:migrate을 실행할 때 나는 아래와 오류가 계속 할 ... 나는 유증의 GitHub의 중요 정보에 대한 문자 https://github.com/plataformatec/devise#getting-started에 따랐습니다rake db : migrate를 실행할 때 오류가 계속 발생하는 이유는 무엇입니까?

SQLite3::CantOpenException: unable to open database file: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")/cygdrive/c/users/daniel/workspace/ruby/rails/tesT_app/db/migrate/20130606041329_devise_create_users.rb:40:in `change'

는, 새로운 프로젝트를 생성하고, 여전히 수 오류.

만든 새로운 레일 응용 프로그램 : (성공)
rails new tesT_app

내 Gemfile-

추가 gem 'devise' :
gem 'devise'

번들를 설치 (성공) : (su (성공)
rails generate devise User

:
rails generate devise:install

이 이름 사용자와 유증 모델을 생성 (성공 일) : CCESS) bundle install


은 레일
를 발전기 란

SQLite3:CantOpenException (uanble to open database file)에있는 SO 질문을 참조하여 을 반환하는 rake db:create을 사용하려고했습니다. 벌금.

나는 다음 시작 당 rake db:migrate를 실행 ..을 ( 실패) 오류 SQLite3::CantOpenException: unable to open database file: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email")/cygdrive/c/users/daniel/workspace/ruby/rails/tesT_app/db/migrate/20130606041329_devise_create_users.rb:40:in change'` 무슨 일이 일어나고 무엇


? 나는 편지에 착수하는 것을 계속하고 있으며 이것을 이해할 수 없다!

정말 감사하겠습니다.

편집 : 라인 :에 ... create_users.rb (40)는
add_index :users, :email, :unique => true

내가 아무것도 감동하지 않았다 있습니다.

+0

가 해결되는지 알려주세요? * 편집 * 파마는 괜찮습니다 – sircapsalot

+0

당신은 당신의 사본을 게시 할 수 있습니까? –

답변

3

SQLite에서 인덱스 이름의 고유성은 데이터베이스 수준에서 적용됩니다. MySQL에서는 동일한 문제를 재현하지 않습니다. 이 라인을 주석으로 바꾸거나 (생산 과정에서 디플로이하는 동안 돌아 오는) 인덱스 데이터베이스를 변경하거나 데이터베이스를 변경할 수 있습니다. 대신 mysql을 사용하십시오.

+0

감사합니다 이반, 나는 sqlite로 많은 일을하지 않았기 때문에 내 무지가 내게 최고가 될지도 모릅니다. 네가하는 말이 사실이라면 왜 그것이 작동하지 않는지 이해할 수있을 것이다. 집에 돌아 왔을 때 알려 드리겠습니다. – sircapsalot

+0

- 인덱스를 주석 처리했을 때 잘 작동했습니다. 당신이 말한 것을 만드는 문서를 제게 링크시켜 주 시겠어요? 는 등 "sqlite가이 필수 인덱스를 사용합니다"라는 곳 .. 저 링크 정말이 답변 – sircapsalot

1

죄송합니다. 분리 된 사용자 모델이 있다고 생각합니다. 이전 파일을 게시 하시겠습니까? 또한 새로운 DB를 마이그레이션하고 있는지 확인합니다 그 다음

rake db:create and rake db:migrate 

rake db:drop 

이 (현재의 DB를 삭제)를 실행 해보세요.

+0

감사합니다 :) 감사하겠습니다 - 오늘 집에 갈 때 내가 이것을 시도 할 것이다 – sircapsalot

0

나는 비슷한 문제를 가지고 나는이 방법으로 다음과 같은 건의 할 것입니다. 다음 두 단계로 마이그레이션을 수행하십시오. 예를 들어, 사용자라고하는 마이그레이션이 있다고 가정 해 봅시다. 아직 고유성을 적용하지 않는 여기 당신처럼 일반적으로이 마이그레이션 :하지만,

class CreateUsers < ActiveRecord::Migration 
    def change 
    create table :users do |t| 
     t.integer :name 
     t.integer :email 
     t.timestamps 
    end 
    end 
end 

마이그레이션을 사용하여 : 마이그레이션 후

$ bundle exec rake db:migrate 

생성, 다른 마이그레이션 :

$ rails generate migration add_index_users_name_email 

에서을 이 마이그레이션 파일은 고유성을 추가

class AddIndexUsersNameEmail < ActiveRecord::Migration 
    def change 
    add_index :users, :name, unique: true 
    add_index :users, :email, unique: true 
    end 
end 

평소와 같이 마이그레이션이 작동합니다 이반이 언급 한 바와 같이 SQLite는이 DB 수준에서 고유성을 적용하고이 방법으로 그 일을하면 문제를 해결할 수 있기 때문에 오류가 발생하지 않습니다. 그 여전히 오류를 던지고 것은 각 항목에 대해 별도의 마이그레이션을 만들 경우

또 다른 방법

은이 문제를 해결합니다. 예를 들어 :

$ rails generate migration add_index_users_name 
$ rails generate migration add_index_users_email 

class AddIndexUsersName < ActiveRecord::Migration 
    def change 
    add_index :users, :name, unique: true 
    end 
end 

class AddIndexUsersEmail < ActiveRecord::Migration 
    def change 
    add_index :users, :email, unique: true 
    end 
end 

는 파마가 문제가 될 것입니다 알고하지 않습니다 .. 그것은 객체 표준 레일 작동,하지만 유증과 불평 문제

관련 문제