rails code_challenge ruby-on-rails database ruby-on-rails-3 oauth-2.0 rake-task

ruby-on-rails - code_challenge - rails api authentication



La relación de error indefinible PG no existe (18)

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 intento 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!


(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 gema 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


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 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 <top (required)>'' /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 <top (required)>'' /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 <top (required)>'' /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 <top (required)>'' /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 here en ActiveAdmin sobre si esa gema 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í.


Ese problema para mí fue causado por los rieles 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 gema 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 dinámicos de los documentos de Factory Girl Rails para obtener más información.

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


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"


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.


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


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 rieles.

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


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


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.


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''.


Retire la carpeta Admin y ejecute rake nuevamente.


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 este problema después de eliminar la tabla de usuarios. las soluciones estaban cambiando

change_table(:users)

a

create_table(:users)


Tuve este problema y resultó ser causado por Grape API . Noté en el seguimiento de la pila 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ó.


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.


::Migration[5.0] faltaba en las migraciones. en lugar de lanzar un error de sintaxis , 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 rieles y podría ayudar a alguien, en lugar de luchar y preguntarse.