2017-11-11 9 views
1

私は、レール5.1アプリケーションを、デフォルトのactive_recordとしてインクリメンタルIDの代わりにUUIDを使用して変換しています。Rails 5 uuid issue with sqlite

私は私がPRODでPGを使用すると「UUID-OSSP」と「pgcryptoの」をサポートするために、移行ファイルを追加しました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 

を使用するために、私の移行ファイルを変更しました。

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は「UUIDが」私は、私はsqlite3のために文字列型の代わりに、UUIDを使用して開始することができます示唆、私は上のつもりで知られているタイプ

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

ないというヒントを提供していますプロダクションのためにポストグルを使用し、uuidsを使いたい。

devでpgを使用する必要がありますか、別の方法がありますか?

+1

...ムーは短すぎる、あなたの開発プラットフォームと生産の1の間で同一の環境を使用する必要があります、またはあなたは多くの困難に直面しますで言っ

本番環境では、開発環境やテスト環境でもそれを実際に使用する必要があります。 PostgreSQLとSQLiteの違いはたくさんあります.Railsは3つの環境すべてで同じデータベースを使用していないことからあなたを守りません。このようなマイナーなデータ型の問題は、あなたの懸念事項の中で最も少なくなります。 –

答えて

0

SQLiteは汎用DBではなく、SQL-92を完全に実装していません。あなたはそれが設計された目的のためにのみSQLiteを使うべきです(主にソフトウェア、キャッシングなどを有効にする)。

Using UUIDs in SQLiteここをクリックすると、SQLiteにはUUIDという実際のタイプ(BLOB(16)が最適です)がないことがわかります。あなたは、PostgreSQLを使用する予定がある場合として

+0

OK私はdevでPostgresを使用します – rapdev