Я пытаюсь встать и работать с первичными ключами UUID для модели с Postgres и Rails 4.0 .0.rc2, но мои спецификации не могут создавать и уничтожать, но MyThing.create
или MyThing#destroy
отлично работает с консолью рельсов (как в тестовых, так и в тестовых средах). ... пока я не запустил спецификации, и в этом случае выполнение любой из этих операций перестает работать через консоль. Таким образом, это похоже на то, что происходит, когда я запускаю свои спецификации, которые меняют мою БД, и запрещает ключи UUID продолжать работать.RSpec, Rails 4, Postgres, первичные ключи UUID: id имеет значение null с Rake + RSpec, но это нормально в RSpec или консоли
Halp?
Я последовал this blog post генерировать свою миграцию, таким образом моя схема выглядит следующим образом:
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
Migrate:
$ 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">
(ликование)
Run характеристики:
$ 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'
(печальное лицо)
Может кто-то точка меня в правильном направлении здесь, что может делать глупые вещи с моим db?
Обновление: Я могу запустить bin/rspec spec
снова и снова с успехом (все мои спецификации проходят). Если я запустил rake spec
, я получаю сбои, затем в следующий раз, когда я запустил bin/rspec spec
, я получаю сбои.
Редактировать: Обновлено название для отражения проблемы с rake + rspec, а не только с rspec.
Похоже, они будут фиксируя его в Rails 4.0.1. Они должны назвать релиз после вас. –