Postgres と Rails 4.0.0.rc2 を使用してモデルの UUID プライマリ キーを使用して起動して実行しようとしていますが、スペックが作成と破棄に失敗している、MyThing.create
またはMyThing#destroy
Rails コンソールから (開発とテストの両方で) 正常に動作しています。環境)。... spec を実行するまで、その場合、これらのいずれかを実行すると、コンソール経由で機能しなくなります。したがって、仕様を実行すると、DB が変更され、UUID キーが引き続き機能するのを禁止するように見えます。
ハーフ?
このブログ投稿に従って移行を生成したため、スキーマは次のようになります。
ActiveRecord::Schema.define(version: 20130613174601) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "uuid-ossp"
create_table "growers", id: false, force: true do |t|
t.uuid "id", null: false
t.string "name"
t.string "code"
t.datetime "created_at"
t.datetime "updated_at"
end
end
物事の進行は次のとおりです。
作成:
$ rake db:create RAILS_ENV=test
移行:
$ rake db:migrate RAILS_ENV=test
== CreateGrowers: migrating ==================================================
-- enable_extension("uuid-ossp")
-> 0.0052s
-- create_table(:growers, {:id=>:uuid})
-> 0.0043s
== CreateGrowers: migrated (0.0096s) =========================================
モデル オブジェクトを作成します。
$ rails c test
agrian> g = Grower.create name: 'bobo'
(0.3ms) BEGIN
SQL (4.1ms) INSERT INTO "growers" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Tue, 18 Jun 2013 20:22:39 UTC +00:00], ["name", "bobo"], ["updated_at", Tue, 18 Jun 2013 20:22:39 UTC +00:00]]
(0.4ms) COMMIT
=> #<Grower id: "38f84f39-e52e-4664-b776-4fdfcbd60b09", name: "bobo", code: nil, created_at: "2013-06-18 20:22:39", updated_at: "2013-06-18 20:22:39">
(喜び)
実行スペック:
$ rake spec
/Users/sloveless/.rbenv/versions/2.0.0-p195/bin/ruby -S rspec ./spec/controllers/api/v1/growers_controller_spec.rb ./spec/helpers/growers_helper_spec.rb ./spec/models/grower_spec.rb ./spec/requests/api/v1/growers_spec.rb ./spec/routing/api/v1/growers_routing_spec.rb
...............FF..........F.*
(other stuff)
Finished in 0.30626 seconds
30 examples, 3 failures, 1 pending
モデル オブジェクトを作成します。
$ rails c test
Loading test environment (Rails 4.0.0.rc2)
agrian> g = Grower.create name: 'bobo'
(0.4ms) BEGIN
SQL (3.5ms) INSERT INTO "growers" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) [["created_at", Tue, 18 Jun 2013 20:29:36 UTC +00:00], ["name", "bobo"], ["updated_at", Tue, 18 Jun 2013 20:29:36 UTC +00:00]]
PG::Error: ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, bobo, null, 2013-06-18 20:29:36.773391, 2013-06-18 20:29:36.773391).
: INSERT INTO "growers" ("created_at", "name", "updated_at") VALUES ($1, $2, $3)
(0.2ms) ROLLBACK
ActiveRecord::StatementInvalid: PG::Error: ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null, bobo, null, 2013-06-18 20:29:36.773391, 2013-06-18 20:29:36.773391).
: INSERT INTO "growers" ("created_at", "name", "updated_at") VALUES ($1, $2, $3)
from /Users/sloveless/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/activerecord-4.0.0.rc2/lib/active_record/connection_adapters/postgresql_adapter.rb:780:in `get_last_result'
(悲しい顔)
私のデータベースで何が愚かなことをしているのかについて、誰かがここで私を正しい方向に向けることができますか?
更新:何度も何度も実行bin/rspec spec
して成功することができます (すべての仕様に合格しています)。を実行するrake spec
と失敗し、次に実行するbin/rspec spec
と失敗します。
編集: rspecだけでなく、rake + rspecの問題を反映するようにタイトルを更新しました。