Su problema inmediato es que está produciendo SQL no válido para PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
Su ORDEN POR no coincide con el resto de su consulta. No puede usar una columna en una consulta agrupada a menos que esa columna también esté agrupada o si la columna aparece en una función agregada, eso es lo que significa el mensaje de error. La razón es que PostgreSQL no sabrá qué fila created_at
para usar cuando la cláusula GROUP BY combina un grupo de filas; algunas bases de datos simplemente elegirán una fila en silencio, PostgreSQL prefiere ser estricto y quiere que usted mismo elimine la ambigüedad.
Intente especificar el orden usted mismo:
@categories = Micropost.select("category").group("category").order("category")
Otra opción es usar DISTINCT en lugar de GROUP BY para evitar duplicados:
@categories = Micropost.select('DISTINCT(category)')
Por cierto, realmente no deberías estar haciendo ese tipo de cosas en una vista, es posible que quieras mover eso a tu controlador.
Su verdadero problema es que está desarrollando sobre una base de datos mientras se implementa en otra. Le recomiendo que cambie su entorno de desarrollo a PostgreSQL 8.3 (si está implementando en una base de datos compartida de Heroku) o PostgreSQL 9.0 (si está implementando en una base de datos dedicada).