2017-11-11 19 views
1

난 레일 5 월 1 일 응용 프로그램을 UUID를 사용하여 기본 active_record 대신 증분 ID로 시작하도록 변환 중입니다.레일 5 uuid 문제와 sqlite

나는 id: :uuid

class CreateProjects < ActiveRecord::Migration[5.1] 
    def change 
    create_table :projects, id: :uuid do |t| 
     t.string :title 
     t.text :description 

     t.timestamps 
    end 
    end 
end 

내가 자극에 페이지를 사용하도록 의도 한대로 나는 'UUID - OSSP'와 'pgcrypto'을 지원하기 위해 마이그레이션 파일을 추가 한을 이용할 수 있도록 마이그레이션 파일을 변경했습니다.

class EnablePgcryptoExtension < ActiveRecord::Migration[5.1] 
    def change 
    enable_extension 'uuid-ossp' 
    enable_extension 'pgcrypto' 
    end 
end 

하지만 개체를 ​​만들려고 할 때 ID가 null 인 것처럼 오류가 발생합니다.

ActiveRecord::NotNullViolation: SQLite3::ConstraintException: NOT NULL constraint failed: projects.id: INSERT INTO "projects" ("created_at", "updated_at") VALUES (?, ?)

schema.rb 알려진 유형

# Could not dump table "projects" because of following StandardError 
# Unknown type 'uuid' for column 'id' 

내가 문자열 유형 대신 sqlite3를위한 UUID를 사용하여 시작할 수 제안이 아닌 'UUID'고 힌트를 제공합니다,하지만 난에 의도 프로덕션을 위해 포스트그레스를 사용하고 uuids를 사용하고 싶습니다.

dev에서 pg를 사용해야합니까, 아니면 다른 방법이 있습니까?

+1

는 PostgreSQL의 사용에 대한하려는 경우 ...

너무 짧은에서 말했듯이

, 당신은 개발 플랫폼 및 생산 일 사이에 동일한 환경을 사용해야합니다, 또는 당신은 많은 문제에 직면하고 있습니다 프로덕션 환경에서는 개발 환경과 테스트 환경에서이를 실제로 사용해야합니다. PostgreSQL과 SQLite 간에는 많은 차이가 있습니다. Rails는 3 가지 환경 모두에서 동일한 데이터베이스를 사용하지 않는다는 사실로부터 당신을 보호 할 수 없으며 그렇게하지 못할 수도 있습니다. 이와 같은 사소한 데이터 유형 문제는 귀하의 우려를 덜어 줄 것입니다. –

답변

0

SQLite는 일반 DB가 아니며 SQL-92를 완전히 구현하지 않습니다. 당신은 단지 목적을 위해 SQLite를 사용해야합니다 (주로 소프트웨어, 캐싱 등을 가능하게합니다).

여기를 보시면 Using UUIDs in SQLite입니다. SQLite에는 UUID 타입이 없습니다 (BLOB(16)이 최선의 선택 임).

+0

난 dev에 Postgres를 사용하겠다. – rapdev