2017-02-24 24 views
5

Tôi đang chuyển đổi dự án Rails thành nhiều người thuê và tôi đang sử dụng Apartment.PG :: InFailedSqlTransaction khi tạo người thuê ban đầu

Tôi làm theo các hướng dẫn trên README và the video they link to

My apartment.rb trông như thế này:

require 'apartment/elevators/subdomain' 
Apartment.configure do |config| 
    config.excluded_models = ['Project', 'User'] 
    config.tenant_names = lambda { Project.pluck :subdomain } 
    config.use_schemas = true 
    config.persistent_schemas = %w{ public } 
end 
Rails.application.config.middleware.use Apartment::Elevators::Subdomain 

mô hình dự án của tôi trông như thế này:

class Project < ApplicationRecord 
    after_create :create_tenant 

    private 

    def create_tenant 
    Apartment::Tenant.create(subdomain) 
    end 
end 

tôi có thể chạy db: di chuyển và db: thiết lập không có vấn đề gì. Nó tạo ra tất cả các bảng của tôi trong lược đồ công cộng sau đó.

Tuy nhiên, khi tôi cố gắng để tạo ra một dự án mới, tôi có được điều này (từ đường ray c)

C:\code\vulnerability-history>rails c 
Loading development environment (Rails 5.0.1) 
irb(main):001:0> Project.create(name: 'foo', subdomain: 'bar') 
    (0.0ms) BEGIN 
    SQL (1.0ms) INSERT INTO "public"."projects" ("name", "subdomain") VALUES ($1, $2) RETURNING "id" [["name", "foo"], ["subdomain", "bar"]] 
    (1.0ms) CREATE SCHEMA "bar" 
    SQL (1.0ms) CREATE EXTENSION IF NOT EXISTS "plpgsql" 
    (2.0ms) DROP TABLE "commit_filepaths" CASCADE 
    (14.0ms) CREATE TABLE "commit_filepaths" ("id" serial primary key, "commit_id" integer NOT NULL, "filepath_id" integer NOT NULL, "total_churn" integer DEFAULT 0 NOT NULL) 
    (1.0ms) DROP TABLE "commits" CASCADE 
    (11.0ms) CREATE TABLE "commits" ("id" serial primary key, "commit_hash" character varying NOT NULL, "author_id" integer NOT NULL, "message" character varying NOT NULL, "date_created" timestamp NOT NULL, "notes" jsonb DEFAULT '{}' NOT NULL) 
    (1.0ms) DROP TABLE "developers" CASCADE 
    (11.0ms) CREATE TABLE "developers" ("id" serial primary key, "email" character varying NOT NULL) 
    (1.5ms) DROP TABLE "events" CASCADE 
    (9.4ms) CREATE TABLE "events" ("id" serial primary key, "detail_type" character varying NOT NULL, "detail_id" integer NOT NULL, "title_template" character varying DEFAULT ':title:' NOT NULL, "description_template" character varying DEFAULT ':description:' NOT NULL, "type_template" character varying DEFAULT ':type:' NOT NULL, "date_template" character varying DEFAULT ':date:' NOT NULL, "style_id" integer NOT NULL) 
    (1.0ms) DROP TABLE "filepaths" CASCADE 
    (11.0ms) CREATE TABLE "filepaths" ("id" serial primary key, "filepath" character varying NOT NULL, "notes" jsonb DEFAULT '{}' NOT NULL) 
    (1.0ms) DROP TABLE "fixes" CASCADE 
    (11.0ms) CREATE TABLE "fixes" ("id" serial primary key, "commit_id" integer NOT NULL, "vulnerability_id" integer NOT NULL, "notes" jsonb DEFAULT '{}' NOT NULL) 
    (1.0ms) DROP TABLE "projects" CASCADE 
    (13.0ms) CREATE TABLE "projects" ("id" serial primary key, "name" character varying NOT NULL, "subdomain" character varying NOT NULL) 
    (1.0ms) DROP TABLE "releases" CASCADE 
    (10.6ms) CREATE TABLE "releases" ("id" serial primary key, "number" integer NOT NULL, "date_released" timestamp NOT NULL, "project" character varying NOT NULL, "notes" jsonb NOT NULL) 
    (1.0ms) DROP TABLE "styles" CASCADE 
    (11.3ms) CREATE TABLE "styles" ("id" serial primary key, "name" character varying NOT NULL, "color" character varying DEFAULT '#ffffff' NOT NULL, "icon" character varying DEFAULT 'stars' NOT NULL) 
    (1.0ms) DROP TABLE "users" CASCADE 
    (11.4ms) CREATE TABLE "users" ("id" serial primary key, "username" character varying NOT NULL) 
    (1.0ms) DROP TABLE "vccs" CASCADE 
    (10.0ms) CREATE TABLE "vccs" ("id" serial primary key, "commit_id" integer NOT NULL, "vulnerability_id" integer NOT NULL, "notes" jsonb DEFAULT '{}' NOT NULL) 
    (1.0ms) DROP TABLE "vulnerabilities" CASCADE 
    (12.3ms) CREATE TABLE "vulnerabilities" ("id" serial primary key, "cve" character varying NOT NULL, "announced" timestamp NOT NULL, "description" character varying DEFAULT '' NOT NULL, "notes" jsonb DEFAULT '{}' NOT NULL) 
    (1.0ms) SELECT version FROM "schema_migrations" 
    ActiveRecord::InternalMetadata Load (1.0ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2 [["key", :environment], ["LIMIT", 1]] 
    (0.0ms) ROLLBACK 
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block 
: SET search_path TO "public", "public" 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `async_exec' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:98:in `block in execute' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:589:in `block in log' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:583:in `log' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:97:in `execute' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/postgresql/schema_statements.rb:315:in `schema_search_path=' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/postgresql_adapter.rb:40:in `reset' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:109:in `rescue in ensure in switch' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:109:in `ensure in switch' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:109:in `switch' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:26:in `block in create' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:97:in `__run_callbacks__' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:750:in `_run_create_callbacks' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activesupport-5.0.1/lib/active_support/callbacks.rb:90:in `run_callbacks' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/apartment-1.2.0/lib/apartment/adapters/abstract_adapter.rb:23:in `create' 
... 22 levels... 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:232:in `transaction' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/transactions.rb:211:in `transaction' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/transactions.rb:392:in `with_transaction_returning_status' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/transactions.rb:319:in `block in save' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/transactions.rb:334:in `rollback_active_record_state!' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/transactions.rb:318:in `save' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/suppressor.rb:41:in `save' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/activerecord-5.0.1/lib/active_record/persistence.rb:34:in `create' 
     from (irb):1 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!' 
     from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>' 
     from bin/rails:4:in `require' 
     from bin/rails:4:in `<main>' 

tôi đã thông báo this issue với một stacktrace tương tự, nhưng cách giải quyết không có ý nghĩa đối với tôi.

Tôi đang sử dụng: của Ruby 2.3.1 (2016/04/26 patchlevel 112) [x64-mingw32] căn hộ 1.2.0 Rails 5.0.1

+0

Hãy thử xóa tất cả trừ một bảng khỏi di chuyển của người thuê nhà của bạn để thu hẹp vấn đề. Nó có thể là một di chuyển xấu. Từ lỗi ActiveRecord :: StatementInvalid, nó có nghĩa là một trong các câu lệnh SQL không hợp lệ. – Troy

Trả lời

0

Nếu các bản ghi là để được tin cậy, có vẻ như không thành công:

SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2 [["key", :environment], ["LIMIT", 1]] 

db/schema.rb của bạn có chứa bảng này không? Đó là một bảng hệ thống mới trong Rails 5.

+0

Ah! Tôi đã không nhận ra rằng một cái mới. Vì vậy, khi tôi không sử dụng căn hộ, nó được tạo ra tốt. Nhưng có vẻ Apartment không tạo ra nó? Tôi sẽ gửi một lỗi với họ và xác nhận. Nếu đó là vấn đề tôi sẽ quay lại và trao cho bạn. – Andy

+0

Không có từ nào từ những người ở chung cư trên [vấn đề của tôi] (https://github.com/influitive/apartment/issues/404), nhưng có vẻ như họ biết ar_internal_metadata với [cam kết này] (https: // github .com/trực quan/căn hộ/cam kết/bd3f56de3d5842ba333fa82f2dab9e65b7ec5592) – Andy

+0

i am a folk folk! :) đối tượng thuê mới được tạo từ db/schema.rb của bạn, bảng này có được xác định không? bạn đang tạo ra thế nào khi bạn không sử dụng căn hộ và nó hoạt động? sửa: nvm tôi đã quên làm thế nào đường ray hoạt động trong giây lát. tôi sẽ xem xét nó. –

Các vấn đề liên quan