La relación de error indefinible PG no existe

Veo esta pregunta antes, pero solo para rspec. Todavía no estoy creando una prueba porque es demasiado avanzado para mí, pero un día, ¡pronto lo haré! :PAG

Recibo este error cuando bash registrarme / iniciar sesión con mi aplicación. No estoy seguro de dónde buscar para solucionarlo. Utilizo el diseño para crear mi usuario y también omniauth2 para iniciar sesión con google .

este es el error

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 

Intenté rake db:migrate , pero ya está creado, en la tabla de esquema existen usuarios. ¿Alguien ha recibido este error antes?

database.yml

 # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config # On Windows: # gem install pg # Choose the win32 build. # Install PostgreSQL and put its /bin directory on your path. # # Configure Using Gemfile # gem 'pg' # development: adapter: postgresql encoding: unicode database: tt_intraweb_development pool: 5 username: my_username password: # Connect on a TCP socket. Omitted by default since the client uses a # domain socket that doesn't need configuration. Windows does not have # domain sockets, so uncomment these lines. #host: localhost #port: 5432 # Schema search path. The server defaults to $user,public #schema_search_path: myapp,sharedapp,public # Minimum log levels, in increasing order: # debug5, debug4, debug3, debug2, debug1, # log, notice, warning, error, fatal, and panic # The server defaults to notice. #min_messages: warning # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. 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: 

¡Gracias!

Al principio, deberá separar todas las conexiones de la base de datos. Por defecto, usa el entorno de desarrollo . Luego intente restablecer la base de datos con lo siguiente:

 rake db:reset 

La tarea rake db: reset soltará la base de datos y la configurará de nuevo. Esto es funcionalmente equivalente a rake db: drop db: setup.

Esto no es lo mismo que ejecutar todas las migraciones. Solo usará el contenido del archivo schema.rb actual. Si no se puede deshacer una migración, rake db: reset puede no serle útil. Para obtener más información sobre cómo deshacerse del esquema, consulte la sección Esquema del esquema y Usted. Documentos de Rails

Si el truco no ayuda, suelte la base de datos, vuelva a crearla de nuevo, migre datos, y si tiene semillas, siembre la base de datos:

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

o en pocas palabras (desde 3.2):

 rake db:migrate:reset db:seed 

Dado que db:migrate:reset implica drop, crea y migra el db. Debido a que el entorno predeterminado para rake es el desarrollo , en caso de que vea la excepción en las pruebas de especificación, debe volver a crear db para el entorno de prueba de la siguiente manera:

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

o con solo cargar el esquema migrado:

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

En la mayoría de los casos, la base de datos de prueba se está sembrando durante los procedimientos de prueba, por lo que no es necesario pasar la acción de la tarea db:seed . De lo contrario, deberá preparar la base de datos (esto está desaprobado en Rails 4 ):

 rake db:test:prepare 

y luego (si realmente se requiere):

 RAILS_ENV=test rake db:seed 

En las versiones más nuevas de Rails, el error ActiveRecord :: NoEnvironmentInSchemaError puede boost, por lo tanto, anteponga las tareas a una tarea de conjunto de entorno de base de datos: db: environment: set :

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

Su base de datos de prueba no está lista para rspec.

Prepare su base de datos de prueba para rspec para corregir este error

 RAILS_ENV=test rake test:prepare 

Soltará, creará y agregará migraciones a su base de datos de prueba

En caso de que la tarea de rake se interrumpa con un mensaje como ‘PG :: Error: ERROR: base de datos’ ‘[your_db_test]’ se está accediendo por otros usuarios ‘ejecute éste

 RAILS_ENV=test rake db:migrate 

Tuve un error similar. La raíz de mi error fue que tenía una referencia a un modelo de Rails en mi archivo factoryies.rb. Entonces causó un problema de error de carga. La solución era envolver la referencia en un bloque o {} para que retrase su ejecución.

Aquí estaba el código BROKEN:

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

Y estaba cometiendo un error porque el User no estaba definido cuando se estaba cargando el archivo factories.rb. Envolví la llamada User.new en un bloque y resolvió el problema:

Código fijo:

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

Nota: probablemente no es una buena práctica que necesite llamar a su modelo de esta manera, pero fue una solución para SECAR mi código.

Obtuve este error también al ejecutar 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 ... 

Fue resuelto para mí después de que corrí

 rake db:test:prepare rake db:test:load 

Me encuentro con este error y sobre mi investigación uno de los motivos de la relación de error indefinible de PG es que los usuarios no existen .

Este error es un error de migración. Es posible que haya creado un nuevo modelo con algunos atributos de base de datos. Después de crear el modelo, debe migrar los atributos al esquema de su aplicación de Rails.

Si está utilizando la máquina local para el desarrollo, puede usar el comando

 rake db:migrate 

Si estás usando heroku

 heroku run rake db:migrate 

Esto a menudo es causado por un error en ActiveAdmin. A continuación, se explica cómo solucionar el error:

Si está usando ActiveAdmin, cualquiera que sea la tabla que PG dice que no existe, comente los contenidos de ese archivo ActiveAdmin rb.

Por ejemplo, para este caso PGError: ERROR: relation "users" does not exist , comente todo el contenido de la app/admin/users.rb , luego descomente después de que haya realizado sus migraciones.

Ese problema para mí fue causado por los Rails de Factory Girl. Recomendaría a quienes lo usan cambiar el nombre de la carpeta de especificaciones / fábricas a especificaciones / temperatura e intentar

RAILS_ENV = your_environment bundle exec rake db: migrate –trace

Si pasa, entonces acaba de encontrar lo que estaba causando. Un vistazo rápido a la gem de Factory Girl Rails gem github me ayudó a identificar el problema.

¡Las fábricas estaban fallando porque estaba intentando crear una instancia de un Modelo que no existía al correr! Ejemplo de código a continuación:

 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 

Encapsular la matriz en un bloque (agregando {}) fue la solución para mí. Tenga en cuenta que payment_options puede tomar más de una opción de pago en el ejemplo …

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

Consulte la parte de Atributos dynamics de los documentos de Factory Girl Rails para obtener más información.

¡No olvide cambiar el nombre de su carpeta de fábricas!

Tuve este problema después de eliminar la tabla de usuarios. las soluciones estaban cambiando

 change_table(:users) 

a

 create_table(:users) 

Obtuve un error similar al intentar ejecutar pruebas con rspec.

Seguí los pasos de Малъ Скрылевъ pero seguí corto. El último paso que tuve que hacer fue cargar mi esquema en mi base de datos de prueba usando:

RAILS_ENV=test rake db:schema:load

Después de eso, el problema desapareció y pude pasar al siguiente error. Espero que eso te de una idea.

Retire la carpeta Admin y ejecute rake nuevamente.

::Migration[5.0] faltaba en las migraciones. en lugar de lanzar un error de syntax , lanza

PG :: IndefinidoTable: ERROR: roles de relación no existe

después de perder horas, finalmente descubrí que falta la ::Migration[5.0] .

Migración Errónea:

 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 

Corrección y corrección de la migración

 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 

Esto podría ser un error con los Rails y podría ayudar a alguien, en lugar de luchar y preguntarse.

La causa más probable es que su rake usa un entorno diferente de database.yml que su servidor web.

(Sé que esto es viejo, pero para futuros googlers)

¿Estás usando un devise ? Sé específicamente que omniauthable es un problema, pero tal vez otros también. No tiene que ser devise sin embargo. Genéricamente la solución es comentar el modelo ofensivo, clase, lo que sea, y dejar de comentar las secciones que los errores piden.

Para mí, lo que devise es que el devise es leer el modelo de User para ver lo que tienes como argumentos para devise (el método de la clase es decir, devise :database_authenticatable, :registerable #etc )

Pero, leerá todo el archivo y, si no es un proyecto nuevo, podría estropearse con otros métodos de clase que dependen de otras cosas (en mi caso, se trataba de la gem friendly_id , y luego un alias_method

La respuesta fue comentar el modelo de User excepción de las líneas de devise * y rake db:schema:load debería funcionar bien.

  • de lo contrario, recibí este error:

    ArgumentError: asignando omniauth_callbacks en un recurso que no es omniauthable. Por favor, agregue el devise :omniauthable al modelo de User

Tuve este problema y resultó ser causado por Grape API . Noté en el seguimiento de la stack que el archivo de rutas se estaba leyendo durante la migración.

En routes.rb se monta la api de uva

 mount API::Base => '/' 

Y en la API se hicieron referencias al modelo faltante. Entonces, gracias a esta respuesta , la coloqué en un bloque que detecta si la está ejecutando el servidor o durante la migración.

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

Y funcionó.

En mi caso, tuve que comentar 2 archivos de ActiveAdmin . Aquí estaban mis pasos:

  1. Error inicial / stacktrace (tenga en cuenta que estamos utilizando Solr en este proyecto): ⇒ rkdbm java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) => Solr is already running rake aborted! PG::UndefinedTable: ERROR: relation "discussions" does not exist LINE 5: WHERE a.attrelid = '"discussions"'::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 = '"discussions"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:25:in block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:1:in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:3:in block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/environment.rb:5:in `' Tasks: TOP => db:migrate => environment (See full trace by running task with --trace) ⇒ rkdbm java version "1.7.0_25" Java(TM) SE Runtime Environment (build 1.7.0_25-b15) Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode) => Solr is already running rake aborted! PG::UndefinedTable: ERROR: relation "discussions" does not exist LINE 5: WHERE a.attrelid = '"discussions"'::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 = '"discussions"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:25:in block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/app/admin/users.rb:1:in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:3:in block in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/routes.rb:1:in ' /Users/matthewcampbell/Sites/code/stack-builders/AchieveX/config/environment.rb:5:in `' Tasks: TOP => db:migrate => environment (See full trace by running task with --trace)

Comenté el archivo app/admin/discussions.rb según la respuesta de Arcolye anterior e intenté migrar mi base de datos nuevamente.

Mismo error.

Miré la stacktrace un poco más de cerca, y noté que de hecho app/admin/users.rb:25 lanzaba la excepción, y por supuesto, ese archivo tiene una dependencia en mi tabla de discussions (mediante la ejecución de Discussion.all ).

Finalmente, comentar los contenidos de users.rb me permitió finalmente migrar mi base de datos con éxito.

FYI: hay una discusión aquí en ActiveAdmin sobre si esa gem debe cargar la base de datos cuando sea necesario.

Entonces teniendo el mismo problema ahora. Recuerde tener solo un modelo en cada migración. Eso lo resolvió para mí.

Encontré la respuesta aquí.

Estaba teniendo el siguiente error y haciendo una búsqueda en todo el código de mi aplicación para type_zones no type_zones encontrarlo. También miré el db y se actualizó.

Resulta que era un archivo en los accesorios /test/fixtures/type_zones.yml que causaba el problema.

 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" 

Para cualquiera que todavía tenga este problema, en mi fábrica de FactoryGirl estaba activando este error.

Intentaba agregar una referencia a través de ‘.new’ o ‘.create’.

Capturaba el error:

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

Resultó ser una solución súper fácil. Copié archivos de una versión anterior del proyecto y olvidé anidarlos dentro de una carpeta “migrar”. Cuando lo hice, resolvió el problema para mí.