복붙노트

[RUBY-ON-RAILS] PG undefinedtable 오류와 관련하여 사용자가 존재하지 않습니다

RUBY-ON-RAILS

PG undefinedtable 오류와 관련하여 사용자가 존재하지 않습니다

나는하지만 RSpec에 대한 전에이 질문을 보았다. 너무 나를 위해 고급 있어요하지만 일일 곧 내가 때문에 아직 테스트를 작성하지 않은! :피

내가 가입 내 응용 프로그램으로 / 로그인을 시도 할 때이 오류가 발생합니다. 나는 사용자를 만들 궁리를 사용하고도 omniauth2는 로그인을 구글로.

이 오류입니다

ActiveRecord::StatementInvalid at /users/auth/google_oauth2/callback
PG::UndefinedTable: ERROR:  relation "users" does not exist
LINE 5:              WHERE a.attrelid = '"users"'::regclass
                                        ^
:             SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
              FROM pg_attribute a LEFT JOIN pg_attrdef d
                ON a.attrelid = d.adrelid AND a.attnum = d.adnum
             WHERE a.attrelid = '"users"'::regclass
               AND a.attnum > 0 AND NOT a.attisdropped
             ORDER BY a.attnum

마이그레이션을하지만, 이미 생성 : 나는 갈퀴 DB를 시도 스키마에서 테이블 사용자가 존재한다. 사람이 전에이 오류를 가지고있다?

database.yml을

설정 = / 옵션 / 지방 / lib 디렉토리 / postgresql84 / 빈 / pg_config

development:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_development
  pool: 5
  username: my_username
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_test
  pool: 5
  username: my_username
  password:

production:
  adapter: postgresql
  encoding: unicode
  database: tt_intraweb_production
  pool: 5
  username: my_username
  password:

해결법

  1. ==============================

    1.처음에는 데이터베이스에서 모든 연결을 분리하여야한다. 기본적으로 당신은 개발 환경을 사용합니다. 다음으로 데이터베이스를 재설정하려고 :

    처음에는 데이터베이스에서 모든 연결을 분리하여야한다. 기본적으로 당신은 개발 환경을 사용합니다. 다음으로 데이터베이스를 재설정하려고 :

    rake db:reset
    

    트릭이 아닌 도움을 않으면 데이터베이스를 삭제 한 다음, 다시 마이그레이션 데이터를 생성 - 다시, 당신은 씨앗이있는 경우, 데이터베이스를 뿌리 :

    rake db:drop db:create db:migrate db:seed
    

    또는 짧은 방법 (3.2 이후) :

    rake db:migrate:reset db:seed
    

    마이그레이션 : dB부터 다시 드롭을 의미, 생성하고 DB를 마이그레이션 할 수 있습니다. 레이크의 기본 환경이 개발이기 때문에, 경우에 다음과 같이 테스트 환경에 대한 DB를 다시 작성해야합니다, 사양 테스트에서 예외를 참조하는 경우 :

    RAILS_ENV=test rake db:drop db:create db:migrate
    

    아니면 그냥 마이그레이션 계획을로드와 :

    RAILS_ENV=test rake db:drop db:create db:schema:load
    

    종자 작업 동작 전달 될 필요가 없습니다 : 데시벨이 때문에 대부분의 경우 테스트 데이터베이스는 테스트 과정에서 뿌린되고있다. 그렇지 않으면, 당신은 (이것은 레일 (4)에서 더 이상 사용되지 않습니다) 데이터베이스를 준비하여야한다 :

    rake db:test:prepare
    

    다음 (그것은 실제로 필요한 경우) :

    RAILS_ENV=test rake db:seed
    

    DB : 환경 : 세트 레일의 최신 버전에 오류 액티브 :: NoEnvironmentInSchemaError 그래서 그냥 데이터베이스 환경 설정 작업과 함께 작업을 앞에 추가, 상승 할 수있다 :

    RAILS_ENV=test rake db:environment:set db:drop db:create db:migrate
    
  2. ==============================

    2.이 오류가 발생하고, 내 연구에, PG undefinedtable 오류와 관련하여 사용자에 대한 이유 중 하나가 오류가 존재하지 않음을 발견 :

    이 오류가 발생하고, 내 연구에, PG undefinedtable 오류와 관련하여 사용자에 대한 이유 중 하나가 오류가 존재하지 않음을 발견 :

    이 오류는 마이그레이션 오류입니다. 당신은 일부 데이터베이스 속성으로 새로운 모델을 만들 수 있습니다. 모델을 생성 한 후에 당신은 당신의 레일 응용 프로그램 스키마 마이그레이션 특성을 가지고있다.

    당신은 로컬 컴퓨터를 사용하는 경우, 개발을 위해, 당신은 명령을 사용할 수 있습니다

    rake db:migrate
    

    당신에게 Heroku를 사용하는 경우

    heroku run rake db:migrate
    
  3. ==============================

    3.테스트 데이터베이스는 RSpec에 준비가되지 않았습니다.

    테스트 데이터베이스는 RSpec에 준비가되지 않았습니다.

    RSpec에이 오류를 해결하기 위해 테스트 데이터베이스를 준비합니다

    RAILS_ENV=test rake test:prepare
    

    그것은 생성, 삭제하고 테스트 데이터베이스로 마이그레이션을 추가합니다

    경우에는 레이크 작업과 같은 메시지와 함께 중단 '오류 : PG : 오류 다른 사용자가 액세스하는 데이터베이스 "[your_db_test]"'이 하나를 실행

    RAILS_ENV=test rake db:migrate
    
  4. ==============================

    4.나는 비슷한 오류가 발생했습니다. 내 오류의 근본은 내 factories.rb 파일의 레일 모델에 대한 참조를했다이었다. 그래서로드 오류 문제를 일으켰습니다. 수정은 블록의 참조 또는 그것을 {} 실행 지연시키는 있도록 포장 하였다.

    나는 비슷한 오류가 발생했습니다. 내 오류의 근본은 내 factories.rb 파일의 레일 모델에 대한 참조를했다이었다. 그래서로드 오류 문제를 일으켰습니다. 수정은 블록의 참조 또는 그것을 {} 실행 지연시키는 있도록 포장 하였다.

    여기에 BROKEN 코드를했다 :

    FactoryGirl.define do
      factory :user do
        guid User.new.send(:new_token)
      end
    end
    

    factories.rb이로드 될 때 사용자가 정의되지 않았기 때문에 그리고 그것은 erroring했다. 나는 블록의 User.new 호출을 포장하고 문제를 해결 :

    고정 코드 :

    FactoryGirl.define do
      factory :user do
        guid { User.new.send(:new_token) }
      end
    end
    

    참고 : 필요에 아마 가장 좋은 방법은이 같은 모델을 호출하지만, 내 코드를 건조 할 수있는 솔루션이다.

  5. ==============================

    5.RSpec에를 실행하는 경우 나뿐만 아니라이 오류가 발생했습니다 :

    RSpec에를 실행하는 경우 나뿐만 아니라이 오류가 발생했습니다 :

     Failure/Error: it { expect(subject.priority_list).to eq [nil] * 9 }
     ActiveRecord::StatementInvalid:
       PG::UndefinedTable: ERROR:  relation "priorities" does not exist
       LINE 5:              WHERE a.attrelid = '"priorities"'::regclass
     ...
    

    그것은 I의 실행 된 후 나를 위해 해결되었습니다

    rake db:test:prepare
    rake db:test:load
    
  6. ==============================

    6.이것은 종종 ActiveAdmin을 버그로 인해 발생합니다. 여기에 버그를 해결 얻는 방법은 다음과 같습니다

    이것은 종종 ActiveAdmin을 버그로 인해 발생합니다. 여기에 버그를 해결 얻는 방법은 다음과 같습니다

    당신이 PG가 ActiveAdmin을의 RB 파일의 내용에서, 주석을 존재하지 않는다고 말했습니다 중 테이블 ActiveAdmin을를 사용하는 경우.

    예를 들어,이 경우에 대한 PGError : 오류 : 관계 "사용자가"존재하지 않는 응용 프로그램의 전체 내용을 밖으로 주석 / 관리 / users.rb, 당신이 당신의 마이그레이션을 완료 한 후에 다음 주석.

  7. ==============================

    7.나에게 그 문제는 공장 소녀 레일에 의해 발생되고 있었다. 내가 사양의 이름을 변경하는 데 사용하는 사람들을 위해 추천 / 공장 사양 / 온도 및 시도에 폴더

    나에게 그 문제는 공장 소녀 레일에 의해 발생되고 있었다. 내가 사양의 이름을 변경하는 데 사용하는 사람들을 위해 추천 / 공장 사양 / 온도 및 시도에 폴더

    RAILS_ENV = your_environment 간부 인 레이크 DB 번들 : 마이그레이션 --trace

    이 통과되면, 당신은 단지 그것을 일으키는 것을 발견했다. 공장 소녀 레일 보석 GitHub의의 환매 특약을 통해 신속하게 발굴 날 문제를 식별 할 수있었습니다.

    공장은 내가 실행에없는 존재 않은 모델의 인스턴스를 시도했기 때문에 실패했다! 코드 샘플 아래 :

    FactoryGirl.define do
      factory :billing_product, class: 'Billing::Product' do
        name            Faker::Cat.name
        product_type    'fuel'
        active          true
        payment_options [Billing::PaymentOption.new(term: 1, payment_term: 1)]
      end
    end
    

    블록의 배열을 캡슐화 나를 위해 수정 않았다 ({} 추가). payment_options이 예에서 하나 이상의 지불 옵션을 걸릴 수 있습니다 ...

    payment_options {[Billing::PaymentOption.new(term: 1, payment_term: 1)]}
    

    동적 더 많은 정보를 원하시면 공장 소녀 레일 문서의 일부 속성을 참조하십시오.

    다시 폴더 귀하의 공장의 이름을 변경하는 것을 잊지 마세요!

  8. ==============================

    8.저도 같은 문제에 직면 한 후 나는 다음과 같은 해결책을 발견했다.

    저도 같은 문제에 직면 한 후 나는 다음과 같은 해결책을 발견했다.

    확인 당신은 database.yml을 파일에 다음과 같은 자격 증명을 모두 입력 한 그들은 올바른 :

    development:
     adapter: postgresql
     encoding: unicode
     database: my_database
     host: localhost
     port: 5432
     pool: 5
     username: postgres
     password: xyz
    
    test:
     adapter: postgresql
     encoding: unicode
     database: my_test_database
     host: localhost
     port: 5432
     pool: 5
     username: postgres
     password: xyz 
    
  9. ==============================

    9.나는 사용자 테이블을 삭제 한 후 나는이 문제를 가지고 있었다. 솔루션은 변화했다

    나는 사용자 테이블을 삭제 한 후 나는이 문제를 가지고 있었다. 솔루션은 변화했다

    change_table(:users)
    

    create_table(:users)
    
  10. ==============================

    10.:: 마이그레이션 [5.0] 마이그레이션 누락되었다. 대신 구문 오류를 던지는이 발생합니다

    :: 마이그레이션 [5.0] 마이그레이션 누락되었다. 대신 구문 오류를 던지는이 발생합니다

    낭비 시간 후에 나는 마침내 마이그레이션이없는 :: 마이그레이션 [5.0]을 알아 냈어.

    잘못된 마이그레이션 :

    class CreateRoles < ActiveRecord # <---- Pay attention
      def change
        create_table :roles do |t|
          t.string :name
          t.integer :code, limit: 2
          t.boolean :is_active, default: true
    
          t.timestamps
        end
      end
    end
    

    고정 및 올바른 마이그레이션

    class CreateRoles < ActiveRecord::Migration[5.0]
      def change
        create_table :roles do |t|
          t.string :name
          t.integer :code, limit: 2
          t.boolean :is_active, default: true
    
          t.timestamps
        end
      end
    end
    

    이 대신에 어려움을 겪고 및 궁금의, 레일과 힘 도움말 사람과 버그가있을 수 있습니다.

  11. ==============================

    11.RSpec에를 사용하여 런타임 테스트를하는 동안 나는 비슷한 오류가 발생했습니다.

    RSpec에를 사용하여 런타임 테스트를하는 동안 나는 비슷한 오류가 발생했습니다.

    나는 Малъ Скрылевъ의 단계를 수행하지만 여전히 짧게 끝났다. 내가 할 필요가 마지막 단계는 사용하여 내 테스트 데이터베이스로 내 스키마를로드했습니다 :

    RAILS_ENV 테스트 레이크 DB를 = : 스키마 : 부하

    문제는 멀리 가서 나는 다음 버그로 이동할 수 후 것이다. 희망이 당신에게 몇 가지 통찰력을 제공합니다.

  12. ==============================

    12.다시 Admin 폴더 및 실행 레이크를 제거합니다.

    다시 Admin 폴더 및 실행 레이크를 제거합니다.

  13. ==============================

    13.(나는 이것이 오래 알고 있지만, 미래 Google 직원)

    (나는 이것이 오래 알고 있지만, 미래 Google 직원)

    당신은 유증을 사용하고 있습니까? 내가 아는 특히 omniauthable 문제이지만, 아마 다른 사람뿐만 아니라. 그래도 고안 될 필요가 없습니다. 일반적으로이 솔루션은 오류가 요청 어떤 부분을 유엔의 주석간에, 그리고 잘못된 모델 클래스를 주석하는 것입니다.

    나를 위해, 무엇 일어나고있는 것은 그 유증 당신이 유증의 인수 (클래스의 방법으로 무엇을 볼 수있는 사용자 모델을 읽고있다 즉 고안 : database_authenticatable : 등록 가능 #etc)

    그러나, 그것은 전체 파일을 읽을 이것은 다음 alias_method는 friendly_id 보석이었다 내 경우에는 (다른 것들에 의존하는 다른 클래스 메소드에 의해 걸려 넘어받을 수있는 새로운 프로젝트 아니며, 경우

    스키마 : 부하가 벌금을 실행해야 답은 유증 라인 (들) * 및 레이크 DB를 제외하고 사용자 모델을 언급했다.

  14. ==============================

    14.가장 가능한 원인은 레이크가 웹 서버에 비해 database.yml을에서 다른 환경을 사용하고 있다는 점이다.

    가장 가능한 원인은 레이크가 웹 서버에 비해 database.yml을에서 다른 환경을 사용하고 있다는 점이다.

  15. ==============================

    15.나는이 문제를 가지고 있었다 그것은 포도 API에 의한 것으로 밝혀졌다. 나는 경로 파일이 마이그레이션하는 동안 읽을 것을 스택 추적에 나타났습니다.

    나는이 문제를 가지고 있었다 그것은 포도 API에 의한 것으로 밝혀졌다. 나는 경로 파일이 마이그레이션하는 동안 읽을 것을 스택 추적에 나타났습니다.

    routes.rb에서 포도 API는 마운트

    mount API::Base => '/'
    

    그리고 API에서 누락 된 모델에 대한 참조이었다. 그래서,이 대답 덕분에 내가 블록에 넣어 자사가 서버 또는 마이그레이션하는 동안 실행되고 있는지 여부를 감지합니다.

    unless ( File.basename($0) == "rake" && ARGV.include?("db:migrate") )
        mount API::Base => '/'
    end
    

    그리고 그것은했다.

  16. ==============================

    16.마이그레이션하는 동안이 오류가 발생하면 반드시 모델의 이름은 복수를인지 확인

    마이그레이션하는 동안이 오류가 발생하면 반드시 모델의 이름은 복수를인지 확인

    그것은를 d.

    add_column :images, :url, :string
    
  17. ==============================

    17.내 경우, 나는이 개 ActiveAdmin을 파일을 주석했다. 여기 내 단계를했다 :

    내 경우, 나는이 개 ActiveAdmin을 파일을 주석했다. 여기 내 단계를했다 :

    나는 위의 Arcolye의 대답에 따라 응용 프로그램 / 관리 / discussions.rb 파일을 주석 처리하고 다시는 내 데이터베이스를 마이그레이션하기 위해 노력했다.

    같은 오류입니다.

    나는 좀 더 밀접하게 스택 트레이스에보고하고,주의 그 사실에서 응용 프로그램 / 관리 / users.rb : 25 예외 던지고 - 과연, 즉 파일 (Discussion.all 실행을 통해) 내 토론 테이블에 종속성이 있습니다.

    마지막으로, users.rb의 내용을 주석 나를 마침내 성공적으로 내 데이터베이스를 마이그레이션 할 수있었습니다.

    참고 : 필요한 경우 그 보석이 데이터베이스를로드할지 여부에 대해 여기 ActiveAdmin을의 토론이있다.

  18. ==============================

    18.지금 같은 문제가 그래서. 각 마이그레이션에 하나의 모델을 가지고해야합니다. 그건 나를 위해 그것을 해결했다.

    지금 같은 문제가 그래서. 각 마이그레이션에 하나의 모델을 가지고해야합니다. 그건 나를 위해 그것을 해결했다.

    여기 답을 가로 질러왔다.

  19. ==============================

    19.나는 다음과 같은 오류를 가지고 내가 그것을 찾을 수 없습니다 type_zones 모든으로 내 응용 프로그램 코드를 조회하고 있었다. 나는 또한 DB를 쳐다 보면서 그것은 업데이트되었습니다.

    나는 다음과 같은 오류를 가지고 내가 그것을 찾을 수 없습니다 type_zones 모든으로 내 응용 프로그램 코드를 조회하고 있었다. 나는 또한 DB를 쳐다 보면서 그것은 업데이트되었습니다.

    그것은 밝혀이 문제를 일으키는 것을 /test/fixtures/type_zones.yml기구에서 파일이었다.

    ERROR["test_should_get_new", UsersControllerTest, 0.47265757399145514]
    test_should_get_new#UsersControllerTest (0.47s)
    ActiveRecord::StatementInvalid:  ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "type_zones" does not exist
        LINE 1: DELETE FROM "type_zones"
                            ^
        : DELETE FROM "type_zones"
    
  20. ==============================

    20.나는 오류를 잡기되었다 :

    나는 오류를 잡기되었다 :

    ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "users" does not exist
    LINE 8:                WHERE a.attrelid = '"users"'::regclass
    

    그것은 아주 쉽게 수정으로 밝혀졌다. 나는 프로젝트의 이전 버전을 통해 파일을 복사 한 그들은 "마이그레이션"폴더 안에 둥지를 잊어 버렸습니다. 나는 것을했을 때 나를 위해 문제를 해결했다.

  21. ==============================

    21.여전히 문제가있는 누군가를 위해, 내 경우,이 오류를 유발했다 FactoryGirl 내 공장이었다.

    여전히 문제가있는 누군가를 위해, 내 경우,이 오류를 유발했다 FactoryGirl 내 공장이었다.

    나는 '.new를'또는 '.create'를 통해 참조를 추가하려고했다.

  22. ==============================

    22.보통 예를 들어, 파괴하고 has_many 협회는 모델 사이 협회의 잘못된 유형을 사용할 때 발생 의존성을 확인할 수 있습니다 :

    보통 예를 들어, 파괴하고 has_many 협회는 모델 사이 협회의 잘못된 유형을 사용할 때 발생 의존성을 확인할 수 있습니다 :

    이 문제를 일으킬 수있는 잘못된 방법 :

    Ortkl.rb

     has_many :subcategories, through: :categories, dependent: :destroy
    

    subcategory.rb

    has_and_belongs_to_many :articles
    

    올바른 방법 :

    Ortkl.rb

     has_many :subcategories, through: :categories, dependent: :destroy
    

    subcategory.rb

    declare association with categories here not articles (belongs_to / has_many_and_belongs_to)
    
  23. from https://stackoverflow.com/questions/19097558/pg-undefinedtable-error-relation-users-does-not-exist by cc-by-sa and MIT license