Me he encontrado con un problema al ejecutar mis migraciones en una nueva aplicación Rails (3.2.3). Estamos utilizando postrgres 9.1.3 y - pg (0.13.2) -Los ámbitos del modelo están rompiendo rake db: migrate-rails 3.2.3 postgres 9.1.3
Cuando corro rake db: crear, a continuación, el rastrillo db: migrate, consigo ->
1.9.3-p194 (master) rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
PG::Error: ERROR: relation "roles" does not exist
LINE 4: WHERE a.attrelid = '"roles"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"roles"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
consigo esto, incluso sin ninguna migración definida, así que no creo que sea un problema con las migraciones en sí. Cuando miro el seguimiento de la pila, veo que se están ejecutando los ámbitos definidos en mi modelo de usuario: cuando los comente, las migraciones se ejecutarán sin problemas.
scope :team_leaders, where(role_id: Role.where(name: 'Team Leader').first.try(:id))
scope :area_leaders, where(role_id: Role.where(name: 'Area Leader').first.try(:id))
scope :nation_leaders, where(role_id: Role.where(name: 'Nation Leader').first.try(:id))
scope :employees, where(role_id: Role.where(name: 'Employee').first.try(:id))
¿Esto es un error en los rieles, o estoy haciendo algo mal? Realmente agradecería algo de ayuda: podemos eliminar el uso de estos ámbitos en la aplicación, pero esto es algo que queremos evitar.
¿Debería poner estos ámbitos dentro de un tipo de condición que se llama cuando los carriles se cargan en la consola o como servidor pero no durante las migraciones?
Muchas gracias,
Dan Sowter
Parece que la tabla de roles no se creó en db: create. ¿Hay una migración para Role? ¿Estás usando un complemento de función como acl9 o role_requirement? Si es así, asegúrese de no perder un generador que deba ejecutarse. –
Es posible que también desee intentar envolver los ámbitos causando problemas en un lamda para que no se evalúen hasta que realmente se utilicen. –