Il tuo problema immediato è che stai producendo SQL non valido per PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC
Il tuo ORDER BY non corrisponde al resto della tua richiesta. Non è possibile utilizzare una colonna in una query raggruppata a meno che anche tale colonna non sia raggruppata o se la colonna viene visualizzata in una funzione di aggregazione, ecco cosa significa il messaggio di errore. Il motivo è che PostgreSQL non saprà quale riga è created_at
di quale riga da utilizzare quando un gruppo di righe viene combinato dalla clausola GROUP BY; alcuni database sceglieranno semplicemente una riga da soli, PostgreSQL preferisce essere severo e vuole che tu elimini tu stesso l'ambiguità.
Prova a specificare tu stesso l'ordine:
@categories = Micropost.select("category").group("category").order("category")
Un'altra opzione è usare DISTINCT invece di GROUP BY per evitare duplicati:
@categories = Micropost.select('DISTINCT(category)')
A proposito, non dovresti davvero fare quel tipo di cose in una vista, potresti volerlo spostare sul tuo controller.
Il tuo vero problema è che stai sviluppando su un database mentre esegui la distribuzione su un altro. Ti consiglio di cambiare il tuo ambiente di sviluppo su PostgreSQL 8.3 (se stai eseguendo la distribuzione su un database condiviso di Heroku) o PostgreSQL 9.0 (se stai implementando su un database dedicato).