ruby-on-rails - supported - heroku rails
Rails y Heroku PGError: la columna no existe (2)
Su problema es que los nombres de tabla y columna son sensibles a mayúsculas y minúsculas en PostgreSQL . Esto normalmente se oculta al convertirlos automáticamente a minúsculas al realizar consultas (de ahí que veas el mensaje de error que informa "isupforconsideration"), pero si lograste esquivar esa conversión en la creación (al citar el nombre, como hace Rails para cuando creas una mesa), verás esta rareza. Debe encerrar "isUpForConsideration" entre comillas dobles cuando lo use en una cláusula WHERE para solucionarlo.
p.ej
@photos = @neighborhood.photos.where(["/"isUpForConsideration/" = 1"])
Esta página que he estado desarrollando para mi aplicación ha estado funcionando perfectamente localmente (usando sqllite3), pero cuando la envío a Heroku, que usa PostgreSQL, aparece este error:
NeighborhoodsController # (ActionView :: Template :: Error) "PGError: ERROR: column /" isupforconsideration / "no existe / nLINE 1: ... /" photos / "WHERE (neighborhood = 52 AND isUpForCon ... / n
De esta línea de código:
@photos = Photo.where(["neighborhood = ? AND isUpForConsideration = ?", @neighborhood.id, 1])
isUpForConsideration es definitivamente parte de la columna de Foto. Todas mis migraciones están actualizadas, y cuando recupero el archivo db localmente, la funciónUpForConsideration sigue allí, y la aplicación aún funciona localmente.
También lo intenté:
@photos = @neighborhood.photos(:conditions => {:isUpForConsideration => 1})
y
@photos = @neighborhood.photos.where(["isUpForConsideration = 1"])
Lo que me da este error:
NeighborhoodsController # (ActionView :: Template :: Error) "PGError: ERROR: column /" isupforconsideration / "does not exists / nLINE 1: ... tos /" WHERE (/ "photos /". Neighborhood = 52) AND (isUpForCon .../norte
¿Alguna idea de lo que podría estar haciendo mal?
Otra forma de obtener este error modificando una migración y llevando los cambios a Heroku sin reconstruir la tabla.
Advertencia: perderá datos y quizás referencias, por lo que lo que voy a explicar es una mala idea a menos que esté seguro de que no se perderán referencias. Rails proporciona formas de modificar tablas con migraciones: cree nuevas migraciones para modificar tablas, no modifique las migraciones después de crearlas, en general.
Habiendo dicho eso, puedes ejecutar heroku run rake db:rollback
hasta que la tabla que cambiaste heroku run rake db:migrate
, y luego ejecutar heroku run rake db:migrate
para volver a colocarlo con tus cambios.
Además, puede usar la gema de grifos para hacer una copia de seguridad y restaurar datos. Tire hacia abajo de las tablas de la base de datos, distribúyalas de la manera que necesite y luego vuelva a presionar las tablas con grifos. Lo hago con bastante frecuencia durante la fase de creación de prototipos. Sin embargo, nunca haría eso con una aplicación en vivo.