Vi esta pregunta antes, pero solo para rspec. Aún no he creado la prueba porque es demasiado avanzada para mí, ¡pero pronto lo haré! :PAGS
Recibo este error cuando intento registrarme / iniciar sesión en mi aplicación. Usé devise para crear un 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
Lo intenté rake db:migrate
, pero ya está creado: en la tabla de esquema existen usuarios. ¿Alguien ha recibido este error antes?
database.yml
config = / opt / local / lib / postgresql84 / bin / 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:
RAILS_ENV=test rake db:migrate
trabajó para mi.Respuestas:
Al principio, deberá desconectar todas las conexiones de la base de datos. De forma predeterminada, utiliza el entorno de desarrollo . Luego intente restablecer la base de datos con lo siguiente:
Si el truco no ayuda, elimine la base de datos, luego vuelva a crearla, migre los datos y, si tiene semillas, siembre la base de datos:
o en resumen (desde 3.2):
Dado que
db:migrate:reset
implica eliminar, crear y migrar el archivo db. Debido a que el entorno predeterminado pararake
es el desarrollo , en caso de que vea la excepción en las pruebas de especificaciones, debe volver a crear la base de datos para el entorno de prueba de la siguiente manera:o con solo cargar el esquema migrado:
En la mayoría de los casos, la base de datos de prueba se siembra durante los procedimientos de prueba, por
db:seed
lo que no es necesario aprobar la acción de la tarea. De lo contrario, deberá preparar la base de datos (esto está obsoleto en Rails 4 ):y luego (si es realmente necesario):
En las versiones más recientes de Rails, el error ActiveRecord :: NoEnvironmentInSchemaError puede aparecer, así que anteponga las tareas con un entorno de base de datos establecido task: db: environment: set :
fuente
rake db:test:prepare
hace el trabajo.rake db:reset
. ¡La magia sucede hombre!Encontré este error y, tras mi investigación, descubrí que una de las razones de usuarios de relación de error indefinible de PG no existe es:
Este error es un error de migración. Es posible que haya creado un nuevo modelo con algunos atributos de la base de datos. Después de crear el modelo, debe migrar los atributos al esquema de la aplicación Rails.
Si está utilizando una máquina local, para el desarrollo, puede utilizar el comando
Si estás usando heroku
fuente
rake db:migrate
. Gracias.Su base de datos de prueba no está lista para rspec.
Prepare su base de datos de prueba para rspec para corregir este error
Soltará, creará y agregará migraciones a su base de datos de prueba
En caso de que la tarea de rake se cancele con un mensaje como 'PG :: Error: ERROR: otros usuarios están accediendo a la base de datos "[your_db_test]", ejecute esta
fuente
Tuve un error similar. La raíz de mi error fue que tenía una referencia a un modelo de Rails en mi archivo factories.rb. Entonces causó un problema de error de carga. La solución fue envolver la referencia en un bloque o
{}
para retrasar su ejecución.Aquí estaba el código ROTO:
Y fue un error porque
User
no se definió cuando se estaba cargando factories.rb. Envolví laUser.new
llamada en un bloque y resolvió el problema:Código fijo:
Nota: probablemente no sea la mejor práctica para necesitar llamar a su modelo de esta manera, pero fue una solución para SECAR mi código.
fuente
También recibía este error al ejecutar rspec:
Se resolvió para mí después de que corrí
fuente
Esto a menudo es causado por un error en ActiveAdmin. A continuación, le indicamos cómo solucionar el error:
Si está utilizando ActiveAdmin, cualquier tabla que PG diga que no existe, comente el contenido de ese archivo rb de ActiveAdmin.
Por ejemplo, para este caso
PGError: ERROR: relation "users" does not exist
, comente todo el contenido deapp/admin/users.rb
, luego descomente después de haber realizado sus migraciones.fuente
Ese problema para mí fue causado por los rieles de Factory Girl. Recomendaría a quienes lo usen cambiar el nombre de la carpeta de especificaciones / fábricas a especificaciones / temperatura e intentar
RAILS_ENV = su_environment bundle exec rake db: migrate --trace
Si pasa, entonces acaba de encontrar la causa. Una búsqueda rápida en el repositorio de github de gemas de Factory Girl Rails me ayudó a identificar el problema.
¡Las fábricas estaban fallando porque estaba tratando de crear una instancia de un modelo que no existía al ejecutarse! Ejemplo de código a continuación:
Encapsular la matriz en un bloque (agregar {}) me solucionó. Tenga en cuenta que payment_options puede tomar más de una opción de pago en el ejemplo ...
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 la carpeta de fábricas!
fuente
Estaba enfrentando el mismo problema y luego descubrí la siguiente solución.
Asegúrese de haber ingresado todas las siguientes credenciales en el archivo database.yml y que sean correctas:
fuente
Tuve este problema después de eliminar la tabla de usuarios. las soluciones estaban cambiando
a
fuente
::Migration[5.0]
faltaba en las migraciones. en lugar de arrojar un error de sintaxis , arrojadespués de perder horas, finalmente descubrí que faltaba la migración
::Migration[5.0]
.Migración errónea:
Migración fija y correcta
Esto podría ser un error con rieles y podría ayudar a alguien, en lugar de luchar y dudar.
fuente
Recibí un error similar al intentar ejecutar pruebas usando rspec.
Seguí los pasos de Малъ Скрылевъ pero aún así me quedé corto. El último paso que tenía que hacer era 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. Con suerte, eso le dará una idea.
fuente
Elimina la carpeta Admin y vuelve a ejecutar rake.
fuente
(Sé que esto es antiguo, pero para futuros usuarios de Google)
¿Usted está utilizando
devise
? Sé que específicamenteomniauthable
es un problema, pero quizás otros también. Sin embargo, no tiene por qué serlodevise
. Generalmente, la solución es comentar el modelo, la clase, lo que sea, y eliminar los comentarios de las secciones que soliciten los errores.Para mí, lo que estaba sucediendo es que
devise
está leyendo elUser
modelo para ver lo que tienes como argumentos paradevise
(el método de clase, es decirdevise :database_authenticatable, :registerable #etc
)Pero, leerá todo el archivo y si este no es un proyecto nuevo, podría tropezarse con otros métodos de clase que dependen de otras cosas (en mi caso, era la
friendly_id
gema, y luego unalias_method
La respuesta fue comentar el
User
modelo a excepción de lasdevise
líneas * yrake db:schema:load
debería funcionar bien.de lo contrario, recibí este error:
ArgumentError: Asignación de omniauth_callbacks en un recurso que no es omnidireccional Agregue
devise :omniauthable
alUser
modelofuente
Si recibe este error durante la migración, asegúrese de que el nombre de su modelo sea plural
p.ej.
fuente
La causa más probable es que su rake esté usando un entorno diferente de database.yml que su servidor web.
fuente
Tuve este problema y resultó ser causado por la API de Grape . Noté en el seguimiento de la pila que el archivo de rutas se estaba leyendo durante la migración.
En route.rb se monta la API de Grape
Y en la API había referencias al modelo que faltaba. Entonces, gracias a esta respuesta lo coloco en un bloque que detecta si está siendo ejecutado por el servidor o durante la migración.
Y funcionó.
fuente
Tenía el siguiente error y
type_zones
estaba buscando en todo el código de mi aplicación porque no pude encontrarlo. También miré la base de datos y se actualizó.Resulta que era un archivo debajo de los accesorios lo
/test/fixtures/type_zones.yml
que estaba causando el problema.fuente
Para cualquiera que todavía tenga este problema, en mi caso, fue mi fábrica en FactoryGirl la que desencadenó este error.
Estaba intentando agregar una referencia a través de '.new' o '.create'.
fuente
En mi caso, tuve que comentar 2
ActiveAdmin
archivos. Aquí estaban mis pasos: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:inblock 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
app/admin/discussions.rb
archivo según la respuesta de Arcolye anterior e intenté migrar mi base de datos nuevamente.Mismo error.
Miré el stacktrace un poco más de cerca y noté que, de hecho,
app/admin/users.rb:25
estaba lanzando la excepción, y efectivamente , ese archivo tiene una dependencia en midiscussions
tabla (a través de la ejecuciónDiscussion.all
).Finalmente, comentar el contenido de
users.rb
me permitió finalmente migrar mi base de datos con éxito.FYI: hay una discusión aquí en
ActiveAdmin
acerca de si esa gema debe cargar la base de datos cuando sea necesario.fuente
Así que tengo el mismo problema ahora. Recuerde tener solo un modelo en cada migración. Eso me resolvió.
Encontré la respuesta aquí.
fuente
Estaba captando el error:
Resultó ser una solución muy fácil. Había copiado archivos de una versión anterior del proyecto y olvidé anidarlos dentro de una carpeta "migrar". Cuando hice eso, me resolvió el problema.
fuente
Por lo general, puede suceder cuando usa un tipo incorrecto de asociación entre modelos, verifique las asociaciones de destrucción de dependencia y has_many, por ejemplo:
camino equivocado que puede causar este problema:
article.rb
subcategory.rb
manera correcta:
article.rb
subcategory.rb
fuente